Java 根接口的b/c线性继承结构不工作:可复制
这是一个后续行动,它本身就是一个后续行动 我有下面的接口/类框架代码Java 根接口的b/c线性继承结构不工作:可复制,java,generics,inheritance,Java,Generics,Inheritance,这是一个后续行动,它本身就是一个后续行动 我有下面的接口/类框架代码 interface Copyable<C extends Copyable<C>> { interface Validator<V extends Validator<V>> extends Copyable<V> { interface ValidateValue<O> extends Validator<ValidateVa
interface Copyable<C extends Copyable<C>> {
interface Validator<V extends Validator<V>> extends Copyable<V> {
interface ValidateValue<O> extends Validator<ValidateValue<O>> {
abstract class AbstractValidator<V extends AbstractValidator<V>> implements Validator<V> {
class VVNull<O> extends AbstractValidator<VVNull<O>> implements ValidateValue<O> {
VVNull是一个ValidateValue。看在上帝的份上,它将自己作为一个通用参数传递,并实现ValidateValue。继承是完全线性的,没有菱形继承或任何东西,它是可复制的。你有没有尝试过做接口验证值扩展验证程序?在我的帖子中添加了答案。但是,正如前面两个问题向我表明的那样,Copyable确实需要这些泛型。嗯,他们错了。代码中不使用这些边界。在没有它们的情况下,它同样有效。这些边界在代码中没有使用。我不明白这部分。我得到的印象是,自引用泛型强制所有实现类也都具有自引用泛型,这在深入层次结构时会变得非常混乱;一个是通过子类化AbstractValidator来实现Validator,另一个是通过实现ValidateValue来扩展Validator。类不能同时实现具有两个不同类型参数的接口。
class VVNull<O> extends AbstractValidator<VVNull<O>> implements ValidateValue<O> {
VVNull<O,V extends VVNull<O,V>>
public class CopyableCProblem {
}
interface Copyable<C extends Copyable<C>> {
C getObjectCopy();
}
interface Validator<V extends Validator<V>> extends Copyable<V> {
}
interface ValidateValue<O> extends Validator<ValidateValue<O>> {
@Override
ValidateValue<O> getObjectCopy();
boolean isValid(O o_o);
}
abstract class AbstractValidator<V extends AbstractValidator<V>> implements Validator<V> {
}
class VVNull<O> extends AbstractValidator<VVNull<O>> implements ValidateValue<O> {
@Override
public VVNull<O> getObjectCopy() {
return this;
}
public boolean isValid(O o_o) {
return (o_o != null);
}
}