Kel*_*ung 8 java generics bounded-wildcard
假设我有以下课程:
public class Either<A, B> {
public Object get();
}
Run Code Online (Sandbox Code Playgroud)
Either是一种存储A或B类型的对象的类型. get()检索该对象.
现在的问题是,是否有可能使用泛型改变的方法签名get(),以便返回的类型不只是Object,但A和B的公用超例如,Either<Integer, Long>可以有get()回报Number,一个Either<Deque<T>, Set<T>>能有get()回报Iterable<T>或者Collection<T>,等等.(显然,Either<Foo,Foo>应该有get()回报Foo).
如果这是可能的话,如果我有Either<List<A>, List<B>>,那么最具体的类型get()可以返回什么?它是原始的List,通配符List<?>还是完全不同的东西?
为什么不定义一个抽象类 C,其中包含您认为必要的 A 和 B 共有的逻辑,并在 Either 类中引用它:
public class Either<C> {
public C get();
}
Run Code Online (Sandbox Code Playgroud)
这似乎不是一个很好的答案,但由于 Java 在编译时无论如何都会删除您的类型信息(也就是说,您编译的代码只看到Object而不是 anA或 a B),那么您最适合定义应该做什么保留在显式公共类中。
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |