java泛型--概念、使用、自定义……
来源:互联网 发布:百度云搜索源码 编辑:程序博客网 时间:2024/06/05 12:08
0,泛型不能有用于static的。
1,Class
Class<Boolean> clazz 等效于 Boolean.class;
Class<T> valueType 等效于 T.class
public void _testGeneric(Class<?>clazz)
等效于
public <B> void _testGeneric(Class<? extends B>clazz){
2,通配符
?只能用于方法泛型,不能用于类泛型。
3,泛型就是不确定类型
//泛型如果为确定类型时,就没必要存在了,就想这个警告://The type parameter Plant is hiding the type Plantpublic class Test2<Plant> {private Plant t;public Plant get(){return t;}}
4,把子类使用的其他具体类型传给父类,让父类统一处理。
例子:class Apple extends Fruit extends Plant implements Living
public class PlantFSM<T extends Plant> {private T owner;public PlantFSM(){}public PlantFSM(T owner){this.owner = owner;}public T getOwner() {return owner;}public void setOwner(T owner) {this.owner = owner;}}
public class AppleFSM extends PlantFSM<Apple> {public AppleFSM(){}public AppleFSM(Apple owner) {super(owner);}public static void main(String[] args) {AppleFSM appleFSM = new AppleFSM();Apple apple = new Apple();//自动为Apple类型:com.generic.PlantFSM.setOwner(Apple owner)appleFSM.setOwner(apple);//自动为Apple类型:Apple com.generic.PlantFSM.getOwner()appleFSM.getOwner();}//方法定义的泛型Fpublic <F> F getF(){return null;}}
反编译后
public class PlantFSM{ public PlantFSM(){} public PlantFSM(Plant owner){ this.owner = owner; } public Plant getOwner(){ return owner; } public void setOwner(Plant owner){ this.owner = owner; } private Plant owner;}
public class AppleFSM extends PlantFSM{ public AppleFSM(){} public AppleFSM(Apple owner){ super(owner); } public static void main(String args[]){ AppleFSM appleFSM = new AppleFSM(); Apple apple = new Apple(); appleFSM.setOwner(apple); appleFSM.getOwner(); } public Object getF(){ return null; }}
5,
例子2
public interface IProcessor {public String process(String idipPacket);public int getReqCmdId();public int getRespCmdId();}
/** * <"B">与<"BODY">没任何区别,只是一个类型定义(占位符)。 * @author naijiang.wang */public abstract class AbstractProcessor<BODY> implements IProcessor{@Overridepublic String process(String json) {DataPacket<BODY> dataPacket = getDataPacket(json);response = response(dataPacket, serverId);Object response = null; try {dataPacket = getDataPacket(json);response = response(dataPacket, serverId);} catch (Exception e) {e.printStackTrace();}finally {if(response == null) {response = responseForResult(dataPacket.getHead(), ResultType.API_ERROR);}resp = JsonUtils.toJson(response);}return resp ;}//返回的泛型范围,可以大于真实具体的类型返回。比如:DataPacket.body是QueryReq类型。private DataPacket<BODY> getDataPacket(String json) {return JsonUtils.toBean(json, DataPacket.class, getRequestBodyClass());}public abstract Class<BODY> getRequestBodyClass();private DataPacket<?> response(DataPacket<BODY> dataPacket, Integer serverId) {DataPacket<?> response = process(dataPacket.getHead(), dataPacket.getBody(), serverId);return response;}//子类方法中body比如是:QueryReq类型。<?>表示不是BODY泛型public abstract DataPacket<?> process(DataHeader head, BODY body, Integer serverId);}
public class QueryProcessor extends AbstractProcessor<QueryReq>{@Overridepublic Class<QueryReq> getRequestBodyClass() {return QueryReq.class;}@Overridepublic DataPacket<?> process(DataHeader head, QueryReq body, Integer serverId) {QueryResp queryResp = new QueryResp();//填充数据return new DataPacket<QueryResp>(head, queryResp);}}
http://www.infoq.com/cn/articles/cf-java-generics
阅读全文
0 0
- java泛型--概念、使用、自定义……
- java 自定义注解使用
- Java自定义Annotation使用
- java使用自定义注解
- java 自定义注解使用
- JAVA自定义注解使用
- Java I/O流概念和使用
- java中abstract抽象概念的使用
- Java抽象类的概念和使用
- Java--包的概念及使用
- JAVA中包的概念及使用
- Java抽象类的概念和使用
- JAVA之旅(一)基本常识,JAVA概念…
- java --自定义注解的使用
- java --自定义注解的使用
- Java 自定义泛型类的使用
- Java自定义注解的使用
- java自定义annotation使用详解
- 删除oracle10G
- Codeforces Round #441 (Div. 2)
- 检查空表
- io-nio-socket步步为营(八)实践练习
- apache + tomcate
- java泛型--概念、使用、自定义……
- oracle 10g+ 行列转换
- java回调与观察者模式,与反应堆,前摄器
- java 导出 excel
- java回调与观察者模式,与反应堆,前摄器
- oracle 存储过程知识点
- java注解(三)spring3注解使用……
- gogland File Cache Conflict
- Android开发用过的十大框架