java - 如何返回作为参数给出的相同 Collection 类型,但具有不同的元素类型?

标签 java generics types parameters return

我想这样做:

public <C extends Collection<?>> C<File> strings_to_files(C<String> strings)
{
    C<File> files = new C<File>();

    for(String string : strings)
    {
        files.add(new File(string)
    }

    return files;
}

我只希望它接受任何字符串集合,并返回与文件相同的集合类型。有什么办法吗?或者也许我只是语法错误...

最佳答案

没有好的方法可以直接做到这一点。我认为最简单的方法是将目标集合作为第二个参数传递:

public void string_to_files(Collection<String> strings, Collection<File> files) {
    for(String string : strings) {
        files.add(new File(string));
    }
}

然后客户端代码可以决定它想要返回什么类型的集合。这不会按照您的要求进行,但这是避免必须强制转换和禁止显示警告的最干净的方法。

或者,只需声明返回 Collection<File> 的方法(或特定的 Collection 实现类型)并实例化特定的 Collection您选择的类型。

关于java - 如何返回作为参数给出的相同 Collection 类型,但具有不同的元素类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089432/

相关文章:

java - 从 Java 源文件中获取类注解

c# - 使用泛型指定 lambda 表达式但具有模板化类型

mysql - MySQL : BigInt(20) vs Int(20) 中的类型

haskell - 为什么 ghci 在这种情况下不提供预期的模糊类型变量错误?

java - Windows 7无法关闭Swing应用程序的原因

java - 构造函数 JavaStreamingContext(SparkConf, Duration) 未定义

java - 泛型不从 "this"自动推断类型?

javascript - JavaScript 对 Number(undefined) 做了什么?

java - 我的 Android 应用程序多次检测到同一个蓝牙设备

java - 如何在java中通过反射获取主要类型的泛型字段?