【发布时间】:2009-08-20 09:09:18
【问题描述】:
为什么我不能在包含的本地类中引用泛型父类的类型参数?
public class IsGeneric<T> {
public void doSomething(T arg) {
class A {
T x;
}
A foo = new A();
foo.x = arg;
T bar = foo.x; // error: found java.lang.Object, required T
}
}
根据 Eclipse,上面的代码非常好,但 javac 1.6.0_11 似乎认为foo.x 是 java.lang.Object 类型。该问题的解决方法显然是使A 本身具有通用性,例如在以下代码中:
public class IsGeneric<T> {
public void doSomething(T arg) {
class A<S> {
S x;
}
A<T> foo = new A<T>();
foo.x = arg;
T bar = foo.x;
}
}
但是,我想了解第一个变体有什么问题。有什么想法吗?
【问题讨论】:
-
我知道在 C# 中也是如此,但在 C# 中你也可以使用
class A<T>,节省第二个泛型参数。 -
这绝对和 C# 中的不一样,因为 C# 甚至没有本地类。
-
... 类中的类与 Java 中的类根本不同。
标签: java eclipse generics inner-classes