将编译错误与 Java 泛型和未参数化的原始类型混淆
Confusing compile error with Java generics and raw, unparameterized types
我在使用泛型时遇到了一个有点违反直觉的编译器错误。我不明白的是为什么在这里使用原始类型会导致这样的失败。有没有其他人遇到过这种情况?
public class Test {
public static void main() {
// works
Alpha<Void> a1 = null;
a1.alpha().endBeta().endAlpha();
// compile error: cannot find symbol 'endAlpha()'
Alpha a2 = null;
a2.alpha().endBeta().endAlpha();
}
interface Alpha<T> {
Beta<Alpha<T>> alpha();
T endAlpha();
}
interface Beta<T> {
T endBeta();
}
}
当您有原始类型的引用时,当您调用方法或在该对象上使用字段时,所有泛型都将被忽略。
这是您不应在新代码中使用原始类型的众多原因之一。
我在使用泛型时遇到了一个有点违反直觉的编译器错误。我不明白的是为什么在这里使用原始类型会导致这样的失败。有没有其他人遇到过这种情况?
public class Test {
public static void main() {
// works
Alpha<Void> a1 = null;
a1.alpha().endBeta().endAlpha();
// compile error: cannot find symbol 'endAlpha()'
Alpha a2 = null;
a2.alpha().endBeta().endAlpha();
}
interface Alpha<T> {
Beta<Alpha<T>> alpha();
T endAlpha();
}
interface Beta<T> {
T endBeta();
}
}
当您有原始类型的引用时,当您调用方法或在该对象上使用字段时,所有泛型都将被忽略。
这是您不应在新代码中使用原始类型的众多原因之一。