使用Java泛型和原始的,未参数化的类型混淆编译错误

时间:2015-01-13 05:39:21

标签: java generics

使用泛型时,我遇到了一些有点违反直觉的编译器错误。我不明白为什么在这里使用原始类型会导致这样的失败。还有其他人经历过这个吗?

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();
  }
}

1 个答案:

答案 0 :(得分:2)

当您使用原始类型的引用时,在调用方法或在该对象上使用字段时,将忽略所有泛型

这是您不应在新代码中使用原始类型的众多原因之一。