将编译错误与 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();
  }
}

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

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