A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© endlessjoker 中级黑马   /  2014-3-5 10:17  /  1218 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看书的时候有困惑:有一个Human接口,还有ConcreteHuman1 ..等具体子类,现有一个抽象类叫AbstractHumanFactory,是这么写的
public abstract class AbstractHumanFactory{
       public abstract <T extends Human>T createHuman(Class<T> c);
}
T是泛型我大概知道。那两个尖括号把我搞蒙了,没看懂。能详细解释一下这个函数么

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
T类型是Human的子类;返回值类型是T类型;传进的clazz对象是T类型的。
回复 使用道具 举报
<>只是泛型定义的规定,因为其他括号都有特定含义了,所以选了<>表示泛型的定义
泛型限定就是告诉编译器去检查类型的匹配,在运行的时候虚拟机会自动去掉<>的内容
  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的类型
在函数上泛型限定必须定义在返回值类型之前
不知道这样是不是理解一点了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马