我只是想知道是否可以重用泛型变量。例如,如果我有一个通用类来保存提供给它的数据库模型:

 DataManager<ModelObject1> manager = new DataManager<ModelObject1>();
 ModelObject1 object = new ModelObject1();
 object.setSomeProperty();
 manager.save(object);


然后,我可以重用同一对象以保存不同类型的模型,而无需创建新的通用变量。我该怎么做:

 manager = null;
 manager = new DataManager<ModelObject2>();
 ModelObject2 object2 = new ModelObject2();
 object2.setSomeProperty();
 manager.save(object2);

最佳答案

由于类型擦除,DataManager<ModelObject1>()实际上与创建时的DataManager<ModelObject2>()完全相同,因此从这个角度来看,没有理由不应该重复使用它-在正确的转换之后。

但是,有一些警告。如果修改对象以包含对定义类特定内容的引用,则事情会变得复杂:

这样的事情将意味着您不能安全地重用该对象:

DataManager<ModelObject1> manager = new DataManager<ModelObject1>();
manager.setObject(new ModelObject1());


我强烈建议您这样做,但没有充分的理由。也许如果创建经理是一个非常繁重的过程,则可以证明重用它们是合理的。

这段代码可以很好地编译,但是我强烈建议在转换前使用ss.clear()或之后使用is.clear(),否则您最终会得到包含Set<integer>String

public static void main(String[] args) {
    Set<String> ss = new HashSet<String> ();
    ss.add("Hello");
    Set<Integer> is = unsecureCast(ss);
}

static Set<Integer> unsecureCast(Set s) {
    return (Set<Integer>) s;
}

10-07 19:15
查看更多