2

我正在学习 Java,但我相信这个问题不是特定于语言的。抱歉,如果有人已经问过这个问题,我不知道如何在搜索查询中表达这个问题。

为自己实现了一些泛型方法后不久,我意识到:由于泛型允许您使用更多类型的参数,因此用户输入的某些参数可能没有您期望的功能。我想出的一个“hack”是使用接口作为上限来限制参数输入类型。对于像 compareTo() 这样的流行功能,这很好,因为接口 Comparable 已经足够流行了,但是我发现我不得不编写一个自定义接口来让我的泛型工作很尴尬。

这里有一些代码可以帮助理解我的废话。考虑以下尝试计算通用数据类型集合中唯一元素的非工作代码:

public static <T> int countUnique(Collection<T> c) {
    int count = 0;
    for(T t : c) {
        count += (t.isUnique()) ? (1) : (0);
    }
    return count;
}

当编译器抱怨对象t没有(或者更确切地说,编译器无法确定它们有)方法时,就会出现一个明显的问题isUnique()。我的解决方案:

public interface unique {
    public boolean isUnique();
}

public static <T extends unique> int countUnique(Collection<T> c) {
    int count = 0;
    for(T t : c) {
        count += (t.isUnique()) ? (1) : (0);
    }
    return count;
}

问题是:我必须每次都这样做吗?是不是很笨重?有没有我应该采用的标准做法?

4

1 回答 1

0

这是 OOP 的主要原则。您正在使用对象,并且对象具有行为(方法)。

每个方法都知道它正在使用什么对象。例如,您的方法比较 2 个数字。如果您传递 1 个数字和 1 个字符串数组,它将无法比较它们。

您不必在示例中使用接口作为上界。它可以是您的类,如果您有 2 个具有相似行为的类,那么您创建一个接口并更改上面的方法以使用该接口。

此外,根据Java 代码约定,接口名称应以大写字母开头。

于 2013-06-16T18:59:28.367 回答