<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>的话,那么就是告诉编译器:这是新指定的一个类型,跟ClassName<T>类对象中的T没有半毛钱的关系。也就是说这个show_3中的T和show_2中的E是一个效果,也就是可以把show_3同等程度地理解为<E> void show_3(E e){~~~~~}
摘自:泛型里面的<T> List<T>前面的<T>代表是什么意思?为什么要加<T>?
随机推荐
- Pi
Math]Pi 数学知识忘地太快,在博客记录一下pi的生成. 100 Decimal places 3.1415926535897932384626433832795028841971693993 ...
- C/C++基础知识总结——数据的共享与保护
1. 标识符的作用域与可见性 1.1 作用域 标识符的作用域包括:函数原型作用域.局部作用域.类作用域.命名空间作用域 (1) 函数原型作用域:函数的参与的作用域就是从函数的开始到结束 (2) 局部作 ...
- 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...
- 广告基本知识-ROI分解
任何一个在线广告系统,都面临ROI的问题,对于Invest,我们先不考虑,因为对于流量有多种方式可以买回,也无法优化(当然在RTB的时候是可以优化的).Return是主要优化的方向,Return=点击 ...
- Ubuntu环境变量设置
在配置Ubuntu里面的JDK环境变量时,从网上找到的资料各异,在不同的文件里面配置,如/etc/environment./etc/profile,环境变量设置都是可以的.但是难免会有其它的疑问,不同 ...
- Python:Python学习总结
Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...
- scribefire 多博客管理利器 安装详解
scribefire 多博客管理利器 安装详解 一.ScribeFire介绍 ScribeFire 是 Firefox (火狐浏览器)上著名的博客写作工具,目前已跨平台支持多浏览器(Firefox,C ...
- Memcached 学习笔记(二)——ruby调用
Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...
- linux内核——进程,轻量级进程,线程,线程组
1.进程.轻量级进程.线程.线程组之间的关系 2.及它们的标识相关说明 一.进程.轻量级进程.线程.线程组之间的关系 借助上图说明: 进程P0有四条执行流,即线程, 主线程t0是它的第一个线程,且与进 ...
- 还在为小三角形切图?使用纯CSS写一个简单的三角形
同学们,当美工给的设计图是这样: 或者这样: 我的内心其实是拒绝的-_-:但工作还得干,大部分同学会写 <style> .icon{width:20px;height:20px;displ ...