2012-04-02 83 views
8

此代码编译:类型参数具有多个限制

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

,但如果我

class Test<T extends Serializable & Arrays> { } 

替换最后一行我得到“界面这里预期”。为什么?

回答

13

section 4.4 of the JLS

声明为类型参数具有结合的每种类型的变量。如果没有为类型变量声明绑定,则假定为Object。如果绑定被声明,它包括以下任一:

  • 单一类型的变量T,或

  • 一个类或接口类型T可能跟随接口类型I1 & ... &在。

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

所以基本上,如果你的界限包括一个类,它必须是第一个界限。

(鉴于Arrays不能被实例化,目前还不清楚为什么你会绑定,包括它,你要知道......这是只是一个例子吗?)

+1

«这只是一个例子?»是的:-)我只是试验有界的类型参数。谢谢您的回答。 – Gmacar 2012-04-02 15:07:54

0

如果边界之一是类,它必须先指定。