我有一个简单的实用函数,如下所示:
public static <T, S> HashSet<S> convertSet(Set<T> list, IConverter<T, S> converter)
{
HashSet<S> result = new HashSet<>();
if (list != null)
{
for (T item : list)
result.add(converter.convert(item));
}
return result;
}
我希望这个功能的结果与输入数据的类型相同,所以我尝试将功能更改为以下内容:
public static <T, S, ST extends Set<T>, SS extends Set<S>> SS convertSet(ST list, IConverter<T, S> converter)
{
// following is not working of course!
// I can't create a new object of the generic type!
SS result = new SS();
if (list != null)
{
for (T item : list)
result.add(converter.convert(item));
}
return result;
}
有没有办法写这个以便它有效?在c ++中我们有模板,编译器会自己生成所有必需的函数,在java中有这样的东西吗?
或者任何注释库,以便我可以使用我想要支持的所有Set
类来注释我的函数,并为我生成具体的函数?
我想避免手动为每个Set
类编写一个函数...