如果我有课:
class Foo<T> {}
这样做合法吗?
class Foo<T, R extends Foo<T, R>> {}
对于上下文,我正在尝试为已经具有一个通用参数的Builder实现this模式。
答案 0 :(得分:1)
是的,具有递归泛型类型是合法的。典型的例子是
package java.lang;
public abstract class Enum<E extends Enum<E>>
来自JRE。
答案 1 :(得分:1)
我不确定,是否可以在您的评论中正确回答您的其他问题。但是,让我们尝试解释一下。
带有您所谓的“递归参数”的类绝对是合法的,并且很有意义。
在“可扩展”构建器中使用。让我们看下面的例子:
public interface BaseBuilder<T, B extends BaseBuilder<T,B> {
B add(String field, String value);
default B person(String firstName, String lastName) {
// This chaining is only possible thanks to that recursive parameter
return add("firstName", firstName).add("lastName", lastName);
}
T build();
default T buildPerson(String firstName, String lastName) {
return person(firstName, lastName).build();
}
}
您可以重复使用此功能,例如像这样:
public interface MyBuilder<T> extends BaseBuilder<T, MyBuilder<T> {}