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

6 java generics parameters types 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Ted*_*opp 3

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

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

然后,客户端代码可以决定它想要返回什么类型的集合。这并不符合您的要求,但这是避免强制转换和抑制警告的最干净的方法。

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