我希望创建一个函数f,它获得一个名为n Number
的参数。但是,我还要指定n必须为Comparable
(AtomicInteger
和AtomicLong
不是{}}。我该怎么写这个函数?
我试过这个:public static <T extends Number, Comparable<T>> void f(T n)
但是这没有用。我该如何解决这个问题?
答案 0 :(得分:5)
使用public static <T extends Number & Comparable<T>> void f(T n)
代替逗号:
os.Stdout
答案 1 :(得分:3)
多个类型参数边界必须用&
分隔,而不是,
,例如:
public static <T extends Number & Comparable<T>> void f(T n)
逗号用于分隔多个类型参数声明,例如:
public static <T extends Number & Comparable<T>, S extends Comparator<T>> void f(T n, S m)
根据JLS,类型绑定可以是:
&
分隔)。因此,这有效T extends Number & Comparable<T>
,但这不是T extends Comparable<T> & Number
。
AdditionalBound: & InterfaceType
...
声明为类型参数的每个类型变量都有一个绑定。如果没有为类型变量声明绑定,则假定为
Object
。如果声明了绑定,则它包含:•单个类型变量
T
或•类或接口类型
T
可能后跟接口类型I1 & ... & In
。