一.?? 泛型类的使用
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">super</span><span style="color: #000000">();
</span><span style="color: #0000ff">this</span>.name =<span style="color: #000000"> name;
</span><span style="color: #0000ff">this</span>.age =<span style="color: #000000"> age;
}
<span style="color: #0000ff">public<span style="color: #000000"> T1 getName() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> name;
}
<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> setName(T1 name) {
</span><span style="color: #0000ff">this</span>.name =<span style="color: #000000"> name;
}
<span style="color: #0000ff">public<span style="color: #000000"> T2 getAge() {
</span><span style="color: #0000ff">return</span><span style="color: #000000"> age;
}
<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> setAge(T2 age) {
</span><span style="color: #0000ff">this</span>.age =<span style="color: #000000"> 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">new</span> Student<String,Integer>("章三",20<span style="color: #000000">);
System.out.println(stu.getName()</span>+<span style="color: #000000">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">);
}
<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">for</span><span style="color: #000000">(T e:t){
</span><span style="color: #0000ff">try</span><span style="color: #000000"> {
e.close();
} </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e1) {
</span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span>
<span style="color: #000000">
e1.printStackTrace();
}
}
}
}
三.?? 泛型擦除
定义
1 234 方法重写:
随父类而定
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">abstract</span> <T> <span style="color: #0000ff">void</span><span style="color: #000000"> 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">//</span><span style="color: #008000">自己定义的变量</span>
<span style="color: #000000">
@Override
</span><T> <span style="color: #0000ff">void</span><span style="color: #000000"> test(T t) {
</span><span style="color: #008000">//</span><span style="color: #008000"> 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">void</span><span style="color: #000000"> test(T t) {
</span><span style="color: #008000">//</span><span style="color: #008000"> 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">void</span><span style="color: #000000"> test(Object t) {
</span><span style="color: #008000">//</span><span style="color: #008000"> 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">void</span><span style="color: #000000"> test(Object t) {
</span><span style="color: #008000">//</span><span style="color: #008000"> 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">*/
四.注意事项
没有泛型数组(泛型数组不固定长度,无法开辟空间,泛型数组可以声明,不可以创建,不用)
泛型不能多态
返乡客已嵌套,就是复杂一点,并不难
泛型数组可以声明,不可以创建
声明与定义中泛型只写一次即可 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|