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 Plant public 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(); } //方法定义的泛型F public <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{ @Override public 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>{ @Override public Class<QueryReq> getRequestBodyClass() { return QueryReq.class; } @Override public 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
相关推荐
标题与描述均提到了“全面总结Java泛型--实例”,这表明文章旨在深入解析Java泛型的概念,并通过具体示例来展示其应用。Java泛型是Java编程语言的一个强大特性,它允许在编译时检查类型安全,并且所有的强制转换都是...
java-泛型-面试题.docx
Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力...
Java 泛型是Java编程语言中的一个重要特性,它在2004年随着...这个视频教程"29-API-集合框架-泛型-使用"应该会深入浅出地讲解这些概念,对于想要提升Java编程技能的初学者或有经验的开发者来说,都是很好的学习资源。
泛型为Java编程带来了类型安全和代码重用的优势,通过参数化类型的概念,允许开发者编写更通用、更健壮的代码。它减少了类型转换错误,并通过编译时的类型检查避免了运行时的异常。泛型的引入使Java集合框架的使用...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
Java 泛型是JDK 1.5引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型允许我们在编程时指定容器(如集合)所存储的对象类型,从而在编译时期就能捕获类型错误,避免了运行时的ClassCastException。 ...
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
例如,Java 8引入的流(Stream)API大量使用了泛型,使我们能够进行更高效、更简洁的集合操作。 配合博主的博客文章,你可以更深入地了解泛型在实际项目中的应用,包括但不限于类型安全的容器、泛型与反射的交互、...
本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展历程** - **早期版本的局限**:在Java泛型出现之前,程序员通常使用Object作为容器类(如ArrayList、HashMap等)的默认类型...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误...通过了解 Java 泛型的基本概念和关键字,我们可以更好地使用泛型来提高代码的质量和可读性。
下面将详细解释Java泛型的基本概念、使用方式以及相关的知识点。 1. 泛型的基本概念: - 泛型是一种参数化类型,允许在定义类、接口和方法时使用类型参数,从而创建一种可以适用于多种类型的通用代码。 - 泛型的...
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
"Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...