相关疑难解决方法(0)

BaseFoo不能用不同的参数继承:<T,X.Bar <T >>和<T,X.Foo <T >>

这是Java在多级层次结构中继承Fluent方法返回类型的简化版本.

给出以下代码:

public enum X {
    ;
    static interface BaseFoo<T, S extends BaseFoo<T, S>> {
        S foo();
    }

    static interface Foo<T> extends BaseFoo<T, Foo<T>> {
        void foo1();
    }

    static interface BaseBar<T, S extends BaseBar<T, S>> extends BaseFoo<T, S> {
        S bar();
    }

    static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> {
        void bar1();
    }

}
Run Code Online (Sandbox Code Playgroud)

运行javac X.java我收到错误消息:

X.java:15: error: BaseFoo cannot be inherited with different arguments: <T,X.Bar<T>> and <T,X.Foo<T>>
    static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> { …
Run Code Online (Sandbox Code Playgroud)

java generics inheritance fluent-interface fluent

3
推荐指数
1
解决办法
7523
查看次数

从通用接口扩展而来

最后一行有什么问题?

interface I1<T>{}

 class Class1 implements I1{}
 class Class2 extends  Class1 implements I1{}         //valid

 class Class3 implements I1<Number>{}
 class Class4 extends  Class3 implements I1<Number>{}  //valid

 class Class5 implements I1<Number>{}
 class Class6 extends  Class5 implements I1<Integer>{}  //not valid

 class Class7 implements I1{}
 class Class8 extends  Class7 implements I1<Number>{}         // not valid

 class Class9 implements I1<Number>{}
 class Class10 extends  Class9 implements I1{}         //  not valid !!!
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做?

我在书中看到了,但没有这个东西的解释 - 仅供参考.

PS

例外文字:

java: GenericsTest.I1 cannot be inherited with different arguments:
<java.lang.Integer> and …
Run Code Online (Sandbox Code Playgroud)

java generics inheritance

3
推荐指数
1
解决办法
94
查看次数

标签 统计

generics ×2

inheritance ×2

java ×2

fluent ×1

fluent-interface ×1