很绕的标题,不过我tm确实不知到咋表达合适。主要来讲就是原来看thinking in java的时候有一个一直没理解的地方。后来又忘问了,今天下午在看一篇文章时突然想起来。
问题很简单类似
的签名,表示什么意思??
这种类型第一次出现在Thinking in java 4th,Generic那章。今天在找一个关于Enum的问题时又看到。
这种签名表示的确切意思有:
1.首先,E是SomeType的子类型
2.所有SomeType的子类型,都必须可以添加一个type parameter
3.前面两点说明,SomeType的子类型必须把自己作为type parameter.比如继承时
4.综合上面三点,对f()返回值的限制就是,必须是SomeType的当前子类型。比如
上面的例子。
[b]作用[/b]:
这种写法的主要可以用来写出可以返回具体实现类类型的abstract factory.
也可以实现类似Generator模式(让编译时把泛型信息记录下来的一种模式,应该只有擦除式泛型的语言才有用)
如果有用过Enum,Enum源码中写法也类似:
问题很简单类似
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的当前子类型。比如
上面的例子。
[b]作用[/b]:
这种写法的主要可以用来写出可以返回具体实现类类型的abstract factory.
也可以实现类似Generator模式(让编译时把泛型信息记录下来的一种模式,应该只有擦除式泛型的语言才有用)
如果有用过Enum,Enum源码中写法也类似:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
....
}