浏览 1540 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-16
最后修改:2010-11-16
问题很简单类似 abstract class SomeType<E extends SomeType<E>> { E f(); } 的签名,表示什么意思?? 这种类型第一次出现在Thinking in java 4th,Generic那章。今天在找一个关于Enum的问题时又看到。 这种签名表示的确切意思有: 1.首先,E是SomeType的子类型 2.所有SomeType的子类型,都必须可以添加一个type parameter 3.前面两点说明,SomeType的子类型必须把自己作为type parameter.比如继承时 class MoreSpecificType extends SomeType<MoreSpecificType>{ MoreSpecificType f(){ ..... } } 4.综合上面三点,对f()返回值的限制就是,必须是SomeType的当前子类型。比如 上面的例子。 作用: 这种写法的主要可以用来写出可以返回具体实现类类型的abstract factory. 也可以实现类似Generator模式(让编译时把泛型信息记录下来的一种模式,应该只有擦除式泛型的语言才有用) 如果有用过Enum,Enum源码中写法也类似: public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { .... } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |