<T> List<T>前面<T>的意思

<T> List<T>前面<T>的意思

先看例子:

复制代码 import java.util.*;

class Fruit { public String toString() { return "Fruit"; } }

class Apple extends Fruit { public String toString(){ return "Apple"; } }

class Person { public String toString(){ return "Person"; } }

class ClassName<T> {//主类,文件名ClassName.java

void show_1(T t){
    System.out.println("show_1  "+ t.toString());
}
 
<E> void show_2(E e){
    System.out.println("show_2  "+e.toString());
}
 
<T> void show_3(T t){
    System.out.println("show_3  "+t.toString());
}
 
 

public static void main(String[] args) {
    ClassName<Fruit> o = new ClassName<Fruit>();
    Fruit f = new Fruit();
    Apple a = new Apple();
    Person p = new Person();
    System.out.println("show_1 演示________________________");
    o.show_1( f );
    o.show_1( a );

// o.show_1( p ); 这行代码是不能编译通过的。因为在 // ClassName<Fruit>中已经限定了全局的T为Fruit,所以不能再加入Person; System.out.println("show_2 演示________________________"); o.show_2( f ); o.show_2( a ); o.show_2( p ); System.out.println("show_3 演示________________________"); o.show_3( f ); o.show_3( a ); o.show_3( p );

}

} 复制代码 程序输出:

复制代码 show_1 演示________________________ show_1 Fruit show_1 Apple show_2 演示________________________ show_2 Fruit show_2 Apple show_2 Person show_3 演示________________________ show_3 Fruit show_3 Apple show_3 Person 复制代码

show_2 和show_3方法其实是完完全全等效的。意思就是说ClassName<T>中一旦T被指定为Fruit后那么show_1没有前缀<T> 的话,该方法中只能是show_1 (Fruit对象)

要是有前缀<T>或<E>的话,那么就是告诉编译器:这是新指定的一个类型(声明一个T类型),跟ClassName<T>类对象中的T没有半毛钱的关系。也就是说这个show_3中的T和show_2中的E是一个效果,也就是可以把show_3同等程度地理解为<E> void show_3(E e){~~~~~}

参考

转载于:https://my.oschina.net/famiover/blog/815839

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值