键入具有多个边界的参数

时间:2012-04-02 11:37:15

标签: java generics

此代码编译:

import java.io.Serializable;
import java.util.Arrays;
class Test<T extends Arrays & Serializable> { }

但如果我用

替换最后一行
class Test<T extends Serializable & Arrays> { }

我得到“预期界面”。为什么呢?

2 个答案:

答案 0 :(得分:13)

来自section 4.4 of the JLS

  

声明为类型参数的每个类型变量都有一个绑定。如果没有为类型变量声明绑定,则假定为Object。如果声明了绑定,则它包含:

     
      
  • 单个类型变量T或

  •   
  • 类或接口类型T可能后跟接口类型I1&amp; ......&amp;在

  •   
     

如果任何类型I1 ... In是类类型或类型变量,则是编译时错误。

所以基本上,如果你的边界包含一个类,它必须是第一个绑定。

(鉴于Arrays无法实例化,不清楚为什么你想要绑定包含它,请注意......这只是一个例如?)

答案 1 :(得分:0)

如果其中一个边界是一个类,则必须先指定它。