此代码编译:
import java.io.Serializable;
import java.util.Arrays;
class Test<T extends Arrays & Serializable> { }
但如果我将最后一行替换为
class Test<T extends Serializable & Arrays> { }
我得到“这里预期的界面”。为什么?
From JLS 第 4.4 节 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.4:
每个声明为类型参数的类型变量都有一个界限。如果没有为类型变量声明界限,则假定为 Object。如果声明了边界,则它包含以下任一内容:
如果任何类型 I1 ... In 是类类型或类型变量,则这是编译时错误。
所以基本上,如果你的界限包括一个类,它必须是first bound.
(鉴于Arrays
无法实例化,不清楚为什么要实例化want包括它的边界,请注意...这只是一个例子吗?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)