Java有界类型参数

时间:2015-08-09 10:11:30

标签: java generics types

1.我认为Java中的Interfaces没有实现,那么如何在这里使用compareTo()?

2.据我所知, extends 关键字可以为接口添加新方法,以便稍后实现。 所以我不明白我在这里完全延伸到底是什么?

由于

public class Compare {

    // simple comparison operator < > ... works only on primitives
    // that's why we need the Comparable
    public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
        int count = 0;

        for (T e : anArray)
            if (e.compareTo(elem) > 0)
                ++count;

        return count;
    }
}

2 个答案:

答案 0 :(得分:1)

  1. Java中的接口没有实现,但是不能创建接口的实例。 (尝试一下 - 当您在代码中包含new List()时会发生什么?)您可以创建实现该接口的类的实例,并且该类需要实现接口的方法。

  2. 在这种情况下,您根本不会扩展任何内容。您只需指出'此方法只能用于扩展/实现T接口'的类Comparable<T>

答案 1 :(得分:0)

实际上,从Java 8开始,接口可以具有(默认的,部分的)实现,但这是暂时的。令人困惑的是,关键字extends有两个用法:

  1. 扩展类的功能,正如您所说,通过类比接口类层次结构。
  2. 对于通用类,Bounded Type Parameters用于定义类型参数的边界,例如List<T extends Comparable>。使用相同的关键词是他们在介绍时所做出的决定,大概是为了强调适用于此Generic T 的类本身如何扩展 Comparable (例如)。由于Java中的类和接口共享相同的层次结构,因此您在此处使用它并不重要(尽管接口是可取的)。