【发布时间】:2013-07-03 21:19:04
【问题描述】:
我有以下通用类:
class Or<A,B>
{
Or (A a) {}
Or (B b) {}
}
为什么我尝试编译时会出现以下错误:
Or(A) 已在 Or 中定义 或 (B b) ^在我看来,这两个构造函数共享相同的签名,尽管它们具有不同的泛型类型参数。为什么?以及如何解决这个问题?
更新
我现在明白了这个问题。编译器需要一种方法来区分这两种类型。对于我的用例来说,添加这样的约束就可以了。所以我想补充一个问题:
如何指定 A 和 B 两种类型可以完全不同?
【问题讨论】:
-
旧版type erasure。
-
@johnchen902,您可以将此评论添加为答案吗?会很棒
-
@PrasadKharkar 因为这个问题显然是重复的。在看到有人 10k 或更多答案之前,我不想成为第一个回答者。
-
你不能有类型的联合,见:stackoverflow.com/questions/6592832/…
-
请记住,Java 泛型是编译器虚构的。编译后的代码中基本上没有任何内容可以“记住”它们是通用的。