Java按泛型类型获取集合

假设我有类似这样的类Context.

public class Context {
    Set<A> sA;
    Set<B> sB;
    Set<C> sC;
}

然后我有一个泛型类Performer,它希望基于Context类中的泛型类型执行操作,方法如下 – 在Java中不可能.

public class Performer<T> { // T can be type of A,B or C

   public void saveToSet(T t) {
       Context.Set<T>.add(t); 
   }
}

然后,如果我说类似saveToSet(B b)的内容,将调用Context中的右集,在这种情况下为sB(Set< B>),并且新实例将被添加到该集合中.

好的,问题……在Java中怎么做? :d

最佳答案
遗憾的是,由于类型擦除,这种方法在Java中不起作用.

基本上所有运行时都会看到Context.Set< java.lang.Object> .add(t);并且你的字段崩溃到java.lang.Objects的集合,因此它将无法消除歧义.

您可以通过编写saveToSet(A a),saveToSet(B b)等重载来解决此问题.

在许多方面,包括这一个,Java泛型是C模板的穷表兄弟.

转载注明原文:Java按泛型类型获取集合 - 代码日志