<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>?
随机推荐
- ContentResolver + SqliteOpenHelper + ContentProvider 理解
惭愧,现在才接触到ContentResolver的用法 这个类主要是Android用来实现应用程序之间数据共享的 一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的 ...
- Android Widget(窗口小部件)
Android Widget简介 应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget Provide ...
- MVC4中使用SignalR
MVC4中使用SignalR 前言 周末在偶尔翻阅微软官网的时候看到Getting Started with SignalR and MVC 4此篇文章,知道了signalr这个东西,貌似这个出来很长 ...
- listView 分页加载数据
Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...
- Linux内核 hlist_head/hlist_node结构解析
内核中的定义: struct hlist_head { struct hlist_node *first;}; struct hlist_node { struct hlist_node ...
- JVM内存模型及垃圾收集策略解析(一)
JVM内存模型是Java的核心技术之一,之前51CTO曾为大家介绍过JVM分代垃圾回收策略的基础概念,现在很多编程语言都引入了类似Java JVM的内存模型和垃圾收集器的机制,下面我们将主要针对Jav ...
- HTML <form> 标签的 enctype 属性
HTML <form> 标签 定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 默认地,表单数据会编码为 "application/x-www- ...
- Java之路——Java初接触
本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- jdk 安装配置
在windows上配置JDK 1.下载windows版JDK 网址:http://www.oracle.com/technetwork/java/javase/archive-139210.html ...