具有多个有界类型的逗号或 & 符号?

2022-09-01 01:26:34

在 Java 中,在声明乘法限定类型时,逗号和 & 符号是否都有效?

class MyClass <T extends OtherInterface, SomeInterface>

class MyOtherClass <T extends OtherInterface & SomeInterface>

答案 1

正如其他人所指出的,这:

class MyOtherClass <T extends OtherInterface & SomeInterface>

定义乘法有界类型参数。如果使用 ,则必须为其指定一个同时实现 和 的类型。MyOtherClassOtherInterfaceSomeInterface

但是,这不会定义乘法边界类型参数:

class MyClass <T extends OtherInterface, SomeInterface>

它定义了一个具有两个类型参数的泛型。第一个必须实现 。第二个可以是任何东西。它只是一样的OtherInterface

class MyClass <T extends OtherInterface, U>

除了您将其命名为 而不是 .(约定俗成,类型参数通常是单个大写字母,有时是大写字母和数字或短大写标识符。但编译器并不在乎。它不会查看标识符的形式来弄清楚您是否真的将其作为接口。SomeInterfaceU


答案 2

B2 和 B3 应为接口时,可以有多个边界。B1可以是简单的类或接口<T extends B1 & B2 & B3>