gpt4 book ai didi

java - 泛型和接口(interface)//我必须一起使用它们吗?

转载 作者:行者123 更新时间:2023-11-29 09:01:31 26 4
gpt4 key购买 nike

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

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

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

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

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

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;
}

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

最佳答案

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

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

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

此外,通过 Java Code Conventions接口(interface)名称应以大写字母开头。

关于java - 泛型和接口(interface)//我必须一起使用它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com