浏览Java的源代码,我发现了以下声明:
public abstract class Enum<E extends Enum<E>>
Run Code Online (Sandbox Code Playgroud)
应该如何解释?我坚持了......
谢谢.
就像奎宁一样!@LES2 走在正确的轨道上。
public abstract class Foo <E extends Foo<E>>
{
public static void use(Foo<E> foo) {
// use foo
}
}
Run Code Online (Sandbox Code Playgroud)
如果你有以下课程:
public class FooImpl extends Foo<FooImpl> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
那么这些递归模板给你带来的魔力就是:
Foo要求其参数扩展自身(Foo)。E反过来扩展Foo<E>(由于前一点,它必须扩展),那么您就确保了Foo模板对其子类有“感知”,因为它的子类作为模板参数传递给它Foo该方法可以安全地将this指针向下转换为其派生子类E。