自引用泛型类型
2022-09-03 15:57:23
请考虑以下示例:
public final class Main<T extends Main<T>> {
public static void main(String[] args) {
Main<?> main = new Main<>();
}
}
这可以完美地编译。但是,当我尝试在不使用菱形的情况下进行此编译时,我使其工作的唯一方法是使用原始类型。
Main<?> main = new Main();
没有原始类型的尝试不起作用:
Main<?> main = new Main<?>(); // None of
Main<?> main = new Main<Main<?>>(); // these
Main<?> main = new Main<Main<Main<?>>>(); // compile
那么,为什么带有钻石的原始版本会起作用呢?写作时推断的类型是什么?Main<?> main = new Main<>();
它是推断原始类型,还是推断出某种像这样的无限嵌套类型?
Main<Main<Main<Main<...>>>>