我只是想知道是否可以重用泛型变量。例如,如果我有一个通用类来保存提供给它的数据库模型:
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;
}