此代码编译:
import java.io.Serializable;
import java.util.Arrays;
class Test<T extends Arrays & Serializable> { }
但如果我用
替换最后一行class Test<T extends Serializable & Arrays> { }
我得到“预期界面”。为什么呢?
答案 0 :(得分:13)
声明为类型参数的每个类型变量都有一个绑定。如果没有为类型变量声明绑定,则假定为Object。如果声明了绑定,则它包含:
单个类型变量T或
类或接口类型T可能后跟接口类型I1&amp; ......&amp;在
如果任何类型I1 ... In是类类型或类型变量,则是编译时错误。
所以基本上,如果你的边界包含一个类,它必须是第一个绑定。
(鉴于Arrays
无法实例化,不清楚为什么你想要绑定包含它,请注意......这只是一个例如?)
答案 1 :(得分:0)
如果其中一个边界是一个类,则必须先指定它。