加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java_泛型

发布时间:2020-12-14 06:26:16 所属栏目:Java 来源:网络整理
导读:一.?? 泛型类的使用 1.定义类时使用泛型 类名 …… } 泛型常见字母:T,K,V,E ?span style="color: #000000" 不能使用在静态属性.静态方法上 2.注意: 1 2span style="color: #000000".使用时指定类型(引用类型,不能使用基本数据类型) 3span style="color: #000

一.?? 泛型类的使用

  1.定义类时使用泛型

类名<字母列表>   ……
  
  }

  泛型常见字母:T,K,V,E ?<span style="color: #000000">

  不能使用在静态属性.静态方法上

  2.注意:

  1  2<span style="color: #000000">.使用时指定类型(引用类型,不能使用基本数据类型)

  3<span style="color: #000000">. 不能使用在静态属性.静态方法上,静态属性在编译时确定(即不能把字母用在静态属性上)

  4<span style="color: #000000">.编译时自动检查泛型

  5.接口中泛型只能用在方法中,不能用在全局常量 (接口只是由全局常量和抽象方法组成)

?  3.代码示例

Student<span style="color: #0000ff">private<span style="color: #000000"> T1 name;

<span style="color: #0000ff">private<span style="color: #000000"> T2 age;

<span style="color: #0000ff">public<span style="color: #000000"> Student(T1 name,T2 age) {

  </span><span style="color: #0000ff"&gt;super</span><span style="color: #000000"&gt;();

  </span><span style="color: #0000ff"&gt;this</span>.name =<span style="color: #000000"&gt; name;

  </span><span style="color: #0000ff"&gt;this</span>.age =<span style="color: #000000"&gt; age;

}

<span style="color: #0000ff">public<span style="color: #000000"> T1 getName() {

  </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; name;

}

<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> setName(T1 name) {

  </span><span style="color: #0000ff"&gt;this</span>.name =<span style="color: #000000"&gt; name;

}

<span style="color: #0000ff">public<span style="color: #000000"> T2 getAge() {

  </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; age;

}

<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> setAge(T2 age) {

  </span><span style="color: #0000ff"&gt;this</span>.age =<span style="color: #000000"&gt; age;

}

<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void<span style="color: #000000"> main(String[] args) {

  Student</span><String,Integer> stu=<span style="color: #0000ff"&gt;new</span> Student<String,Integer>("章三",20<span style="color: #000000"&gt;);

  System.out.println(stu.getName()</span>+<span style="color: #000000"&gt;stu.getAge());

}

}

<p align="left">?

二.?? 泛型方法

  定义:

    修饰符<字母> 返回类型 方法名(字母){}

  注意:

?  示例代码: 

<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;

<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> TestMethod {

<span style="color: #008000">//<span style="color: #008000">测试泛型方法

<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void<span style="color: #000000"> main(String[] args) {

  test1(</span>"abc"<span style="color: #000000"&gt;);

}

<span style="color: #008000">//<span style="color: #008000">test1

<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void<span style="color: #000000"> test1(T t){

  System.out.println(t);

}

<span style="color: #008000">//<span style="color: #008000">test2 extends等价于<=

<span style="color: #0000ff">public <span style="color: #0000ff">static <T <span style="color: #0000ff">extends Closeable> <span style="color: #0000ff">void<span style="color: #000000"> test2(T... t){

  </span><span style="color: #0000ff"&gt;for</span><span style="color: #000000"&gt;(T e:t){

     </span><span style="color: #0000ff"&gt;try</span><span style="color: #000000"&gt; {

        e.close();

     } </span><span style="color: #0000ff"&gt;catch</span><span style="color: #000000"&gt; (IOException e1) {

        </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated catch block</span>

<span style="color: #000000">
e1.printStackTrace();

     }

  }

}

}

三.?? 泛型擦除

  定义

  1234    方法重写:

      随父类而定

  5<span style="color: #000000">.泛型接口与继承是一样的
  6.擦除后,不会进行类型检查

<h3 align="left">  示例代码:
<div class="cnblogs_code">  <img id="code_img_closed_b3d10374-c487-49ee-8e8a-3983d0502c06" class="code_img_closed" src="https://www.52php.cn/res/2019/02-08/14/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_b3d10374-c487-49ee-8e8a-3983d0502c06" class="code_img_opened" style="display: none" src="https://www.52php.cn/res/2019/02-08/14/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_b3d10374-c487-49ee-8e8a-3983d0502c06" class="cnblogs_code_hide">


<span style="color: #0000ff">public <span style="color: #0000ff">abstract <span style="color: #0000ff">class Father<span style="color: #000000"> {

T name;



</span><span style="color: #0000ff"&gt;abstract</span> <T> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; test(T t);

}

<span style="color: #008000">//<span style="color: #008000">子类不指定类型

<span style="color: #0000ff">class son <span style="color: #0000ff">extends Father<span style="color: #000000">{

T t2;</span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;自己定义的变量</span>

<span style="color: #000000">
@Override

</span><T> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; test(T t) {

   </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub</span>

<span style="color: #000000">
}

}

<span style="color: #008000">//<span style="color: #008000">父类为泛型类,子类指定类型

<span style="color: #0000ff">class son1 <span style="color: #0000ff">extends Father<span style="color: #000000">{

@Override

</span><T> <span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; test(T t) {

   </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub</span>

<span style="color: #000000">
}

}

<span style="color: #008000">//<span style="color: #008000">子类为泛型类,称为泛型的擦除

<span style="color: #0000ff">class son2 <span style="color: #0000ff">extends<span style="color: #000000"> Father{

@Override

</span><span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; test(Object t) {

   </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub</span>

<span style="color: #000000">
}

}

<span style="color: #008000">//<span style="color: #008000">子类父类同时擦除

<span style="color: #0000ff">class son3 <span style="color: #0000ff">extends<span style="color: #000000"> Father{

@Override

</span><span style="color: #0000ff"&gt;void</span><span style="color: #000000"&gt; test(Object t) {

   </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; TODO Auto-generated method stub</span>

<span style="color: #000000">

}

}

<span style="color: #008000">/*<span style="color: #008000">//错误:子类擦除,父类没有擦除

class son4 extends Father{

@Override

<T> void test(T t) {

   // TODO Auto-generated method stub



}

}<span style="color: #008000">*/

四.注意事项

  

没有泛型数组(泛型数组不固定长度,无法开辟空间,泛型数组可以声明,不可以创建,不用)

泛型不能多态

返乡客已嵌套,就是复杂一点,并不难

泛型数组可以声明,不可以创建

声明与定义中泛型只写一次即可

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读