generic:extends Number&可比的基本理解

时间:2015-11-25 07:00:20

标签: java generics

class  MyTest<K,V extends Number & Comparable> implements Comparable<MyTest>{

    private K key;
    private V value;

}

这是什么意思K, V extends Number & Comparable?在上面的陈述MyTest正在实现一个类似的界面,但我无法弄清K,V以及为什么有数字&amp;可比。 k,v不是接口。有人可以就此启发我。

2 个答案:

答案 0 :(得分:6)

这个类接受两个泛型参数,第一个被命名为K(可能被用作&#34; key&#34;),第二个被命名为{{1 (可能用作&#34;值&#34;)。

V部分表示该类仅接受扩展V extends Number & Comparable抽象类和实现V接口的Number个值。此类的示例是标准JDK ComparableIntegerFloatLongDouble。如果您想将自己的类用作BigInteger,则应扩展V并同时实施Number。对Comparable没有限制:您可以使用K的任何类。例如,此类型有效:

K

但是这个会导致编译错误:

MyTest<String, Integer> myTest; // K = String, V = Integer

答案 1 :(得分:0)

我们可以通过扩展或实现它来对通用类或接口进行子类型化。一个类或接口的类型参数与另一个类或参数的类型参数之间的关系由extends和implements子句确定。

例如,ArrayList实现扩展Collection的List,因此ArrayList是List的子类型,List是Collection的子类型。 这里K表示键,V表示值。然后从你的代码中,Java编译器用Number和V替换类型参数K和Comparable,如下代码所示:

private Number key;
private Comparable value;