Java中对类的双重通用约束:扩展ConcreteClass和I.

axk*_*axk 11 java generics constraints

有没有办法在Java中定义一个类似于以下C#泛型constratint的泛型约束?

class Class1<I,T> where I : Interface1, Class2 : I
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

class Class1<I extends Interface1, T extends I & Class2>
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨"Class2"部分:Type参数不能跟随其他边界.

mit*_*ull 5

这段代码编译好了:

interface Interface1 {}

class Class2 {}

class Class1<I extends Interface1, T extends Class2 & Interface1> {}
Run Code Online (Sandbox Code Playgroud)

当你只假设Interface1时,为什么你需要输入?(你在课堂上对我的了解不多,而不是扩展Interface1)

  • 关键是当为两个参数指定具体类时,"T扩展Class2&I"而不是"T扩展Class2和Interface1" (3认同)

Tom*_*ine 5

我能看到的解决 Java 代码的最简单方法是使 Class2 成为一个接口。

您不能将类型参数限制为扩展多个类或类型参数。此外,您不能在这里使用 super。