以下 Java 代码可编译:
interface Interface1{}
interface Interface2{}
class MyClass1<T extends Interface1 & Interface2>{}
Run Code Online (Sandbox Code Playgroud)
另外,以下代码可以编译:
class AClass{}
interface Interface3{}
class MyClass2<T extends AClass & Interface3>{}
Run Code Online (Sandbox Code Playgroud)
下面的代码会给我一个编译错误:
interface Interface4 {}
class MyClass3<T, S extends T & Interface4> {}
Run Code Online (Sandbox Code Playgroud)
因此,看起来,如果边界类型之一本身就是类型参数,则不可能有多个边界。但这是为什么呢?
据我了解,如果声明了多个边界,则最多其中一个可能是一个类(所有其他边界都是接口),并且它必须是第一个。
但是,由于在我的示例中Interface是一个接口,为什么编译器会抱怨呢?毕竟,T 是接口还是类应该没有任何区别。
我试图在网上找到答案,但显然我的谷歌搜索能力还不够。我很想了解这里发生了什么。