黑马程序员技术交流社区

标题: 工厂模式里泛型的使用 [打印本页]

作者: endlessjoker    时间: 2014-3-5 10:17
标题: 工厂模式里泛型的使用
看书的时候有困惑:有一个Human接口,还有ConcreteHuman1 ..等具体子类,现有一个抽象类叫AbstractHumanFactory,是这么写的
public abstract class AbstractHumanFactory{
       public abstract <T extends Human>T createHuman(Class<T> c);
}
T是泛型我大概知道。那两个尖括号把我搞蒙了,没看懂。能详细解释一下这个函数么

作者: e.c    时间: 2014-3-5 10:48
T类型是Human的子类;返回值类型是T类型;传进的clazz对象是T类型的。
作者: 薛旻    时间: 2014-3-5 10:49
<>只是泛型定义的规定,因为其他括号都有特定含义了,所以选了<>表示泛型的定义
泛型限定就是告诉编译器去检查类型的匹配,在运行的时候虚拟机会自动去掉<>的内容
  1. public abstract class AbstractHumanFactory{
  2.         public abstract <T extends Human>T createHuman(Class<T> c);
  3. }
复制代码

代码的意思是 创建一个抽象Human工厂类 定义一个制造Human的函数
传入的参数是Class类型----JDK1.5后定义Class接口定义成Class<T> ----为什么是Class<T>---这个应该是和类的动态加载有关
至于<T extends Human>T
意思是这个函数的返回值类型是T 这个类型限定为T必须是继承了Human的类型
在函数上泛型限定必须定义在返回值类型之前
不知道这样是不是理解一点了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2