java泛型
2016-05-27 17:40
309 查看
支持泛型类以及泛型方法
泛型使用类型擦除,对于子类继承使用桥方法
//以下为桥接代码
通配符,一般只用于方法参数中,进行更大范围的参数传入
class MyGen<T,E>{ //<X>类型声明在返回值前,若未在类中声明,则必须在方法里声明 public static <X> X myCast(Object o){ return (X)o; } } //类型推导,由前面的引用进行 String s = MyGen.myCast("lalala"); //显式调用 String s = MyGen.<String>myCast("lalal");
泛型使用类型擦除,对于子类继承使用桥方法
public class T{ public static void main(String[] args){ F<String> f = new S(); System.out.println(f.getE("xxx")); } } class F<E>{ //该方法将被擦除成public Object getE(Object e){...} public E getE(E e){ return null; } } class S extends F<String>{ //实际的方法重写代码,系统将为S生成一个public Object getE(Object e){...}的桥方法,并将实际调用代理到以下的方法 public String getE(String s){ return "love"; } }
//以下为桥接代码
通配符,一般只用于方法参数中,进行更大范围的参数传入
? extends E,表示E的所有子类中的某一个具体子类. ? super E,表示E的所有父类中的某一个具体父类. ? 等价于(? extends Object) 表示所有类中的某一个具体类.(只用于<?>替代<Object>使用Object方法以及Class<?>与具体类型无关方法) import java.util.ArrayList; import java.util.List; /** * @author doggy * Created on 16-5-27. */ public class Test { public static void main(String[] args) { List<? extends String> l = new ArrayList<String>(); addFrom(l); List<Object> ll = new ArrayList<Object>(); addTo(new ArrayList<Object>()); } //不能从super泛型中获得数据(因为不确定是哪个父类),只能使用Object进行for循环。 public static void addTo(List<? super String> es){ es.add("sdfsf"); } //不能往extends泛型中添加数据,因为某个具体子类中加入其他子类可能错误。 public static void addFrom(List<? extends String> es){ for(String x:es){ System.out.println(es); } } }
相关文章推荐
- Java集合详析总结
- struts2标签库(1)
- Java学习笔记之构造方法和static使用
- SpringMVC:生成Excel和PDF
- 我的Java之路
- PageRank的初步理解和实践
- Java内存模型
- eclipse修改web名称报错
- Java学习笔记之抽象类
- Springmvc构造RESTful详细讲解
- Java学习笔记之多态
- Java学习笔记之接口
- java事务理解
- spring quarz定时器
- JAVA学习(10) 继承(5) 接口
- Java监听器的使用
- Java第四课:接口
- 使用spring boot和thrift、zookeeper建立微服务
- Java访问Hbase
- 彻底理解JAVA动态代理