具有多个边界的类型参数

2024-04-02

此代码编译:

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。如果声明了边界,则它包含以下任一内容:

  • 单一类型变量 T,或

  • 类或接口类型 T 可能后跟接口类型 I1 & ... & In。

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

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

(鉴于Arrays无法实例化,不清楚为什么要实例化want包括它的边界,请注意...这只是一个例子吗?)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个边界的类型参数 的相关文章

随机推荐