总结Java的Generics(二)

2014-11-24 09:09:53 · 作者: · 浏览: 4

代码片段:

1: static
2: T wildSubtype(Holder< extends T> holder, T arg) {
3: // holder.set(arg); // Error:
4: // set(capture of extends T) in
5: // Holder
6: // cannot be applied to (T)
7: T t = holder.get();
8: return t;
9: }
10: static
11: void wildSupertype(Holder< super T> holder, T arg) {
12: holder.set(arg);
13: // T t = holder.get(); // Error:
14: // Incompatible types: found Object, required T
15:
16: // OK, but type information has been lost:
17: Object obj = holder.get();
18: }

< extends T> 和 < super T>两者中,前者适合get到特定类型T, 但是不能做set操作。后者相反, 可以set特定类型,但是不能get到特定类型。

Holder, Holder< >这两个类不一样,Holder代表可以包含任何类型,Holder< >代表可以包含一系列同种类型,但不知道是哪种类型,甚至于你不能往里面加入Object