我想将内部类作为参数的泛型外部类.我期待,我将从基类派生出来,或者使用它的内部,或者从内部派生出来.在每个级别,我都希望从当前的派生水平开始限制内部类别的使用.
不幸的是,我在使用模式时会遇到各种错误和警告,这是我无法想象的,如何使用它.
package tests.java;
public class Try_GenericInnerRecursion {
// base class, consisting of outer and inner parts
public static class Outer1<E extends Outer1<E>.Inner1> {
public class Inner1 {
}
public void addElement(E e) {
System.out.println("Added " + e.toString());
}
}
// extending outer, but not inner
public static class Outer2<E extends Outer1<E>.Inner1> extends Outer1<E>{
}
// extending both outer and inner
public static class Outer3<E extends Outer3<E>.Inner3> extends Outer1<E>{
public class Inner3 extends Inner1 {
}
}
// extending both outer and inner and stopping extension
public static class Outer4 extends Outer1<Outer4.Inner4> {
public class Inner4 extends Outer1<Inner4>.Inner1 {
}
}
// instantiating
public static void main(String[] args) {
Outer1<Outer1.Inner1> a1; // WARNING: Outer1.Inner1 is a raw type
a1 = new Outer1<Outer1.Inner1>(); // WARNING: Outer1.Inner1 is a raw type
Outer1<?> a2; // OK
a2 = new Outer1<?>(); // ERROR: Cannot instantiate the type Outer1<?>
Outer1<Outer1<?>.Inner1> a3; // ERROR: Bound mismatch: The type Outer1<?>.Inner1 is not a valid substitute for the bounded parameter <E extends Outer1<E>.Inner1> of the type Outer1<E>
Outer1<? extends Outer1<?>.Inner1> a4; // OK
a4 = new Outer1<Outer1.Inner1>(); // ERROR: Type mismatch
Outer2<Outer1.Inner1> b1; // WARNING: Outer1.Inner1 is a raw type
b1 = new Outer2<Outer1.Inner1>(); // WARNING: Outer1.Inner1 is a raw type
// and so on
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何正确使用这种模式?
我相信你可以简单地做到
DerivedCorpus1<?>
Run Code Online (Sandbox Code Playgroud)
在通配符捕获期间,它变成
DerivedCorpus1<x> where x extends Corpus<x>.Element
Run Code Online (Sandbox Code Playgroud)
这是正确限制的。
在你的例子中
DerivedCorpus1<? extends Corpus<?>.Element>
Run Code Online (Sandbox Code Playgroud)
在通配符捕获期间,它变成
DerivedCorpus1<x> where x extends Corpus<x>.Element
and x extends Corpus<?>.Element
Run Code Online (Sandbox Code Playgroud)
显然,该extends Corpus<?>.Element条款是多余的。
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |