java:针对接口(interface)进行编程,但必须实例化一个具体类

标签 java generics interface

我正在迈出使用泛型的第一步,我刚刚编写了一个泛型函数来比较两个 List 对象,如下所示

public static <T> List<T> diffAdded(List<T> source, List<T> dest) {
    List<T> ret = new ArrayList<T>();
    for(T element: dest) {
        if (!source.contains(element)) {
            ret.add(element);
        }
    }
    return ret;
}

一切正常,但我正在实例化一个 ArrayList,因为显然我无法实例化一个接口(interface) List

事实是我想返回一个与源类型相同的对象...

遇到这种情况你会如何处理?

我现在的方法会遇到任何转换问题吗?

非常感谢

最佳答案

这个问题的答案几乎总是“返回与源类型相同的对象”实际上与您的应用程序无关,并且您正在以错误的方式处理事情.

如果您的调用者需要特定的 List 实现,因为他们将对其执行特定类型的操作,那么他们可以自己进行复制...但是如果您的方法采用任意List 类型的参数,并且输出根据输入的确切实现在语义上发生变化,那么这是一个巨大的代码味道。

保持代码不变,如果方法的调用者确实需要特定的实现,那么他们可以将您的输出复制到自己的实现中。

关于java:针对接口(interface)进行编程,但必须实例化一个具体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385533/

相关文章:

c++ - 如何在 C++ 中实现接口(interface)或类接口(interface)关系?与 .h 文件和 void () = 0 混淆

java - 使用 JAVA 访问 MS Outlook

java - 持久化类在 ID 上给出空值

generics - 有什么方法可以让 Rust 理解 `fn(T) -> impl Future` 总是返回相同的类型?

java - 无法停止oracle 10g中的监听器

generics - 如何重新导出具有具体类型的泛型函数?

java - 通配符声明的非显式泛型类型的泛型返回类型

design-patterns - 无用的接口(interface)

Java解析HTTP文本文件格式

java - 如何通过类对象访问静态成员