统一具有相同擦除类型的方法

时间:2014-01-03 19:12:58

标签: java type-erasure

这里有很多答案,可以解释为什么这段代码不起作用。虽然您可能会争论设计并提出使用继承的解决方案,但我仍然希望看到编译错误是否能够以不同方式解决。

由于两个转换函数是相同的,只是迭代一个泛型集,我想必须有一个选项如何统一它们。知道怎么做吗?

此代码不会编译:方法转换(Set)与类型示例

中的另一种方法具有相同的擦除转换(Set)
public class Example {
public static Set<A> transform(Set<A> items) {
    Set<A> itemsSet = new HashSet<A>();
    for (A item : items) {
        itemsSet.add(process(item));
    }
    return itemsSet;
}

public static Set<B> transform(Set<B> items) {
    Set<B> itemsSet = new HashSet<B>();
    for (B item : items) {
        itemsSet.add(process(item));
    }
    return itemsSet;
}

public static A process(A v) {
    //Some code here 
    return v;
}

public static B process(B v) {
    //Some different code here
    return v;
}

class A{}
class B{}

}

1 个答案:

答案 0 :(得分:0)

没有。因为在运行时,两个泛型都会被删除,而您只剩下java.lang.Object。你可以用不同的方式命名你的方法。