可以重用泛型变量吗?

时间:2013-02-09 23:56:01

标签: java generics

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

 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);

2 个答案:

答案 0 :(得分:3)

那不会编译。您无法将DataManager<ModelObject2>分配给DataManager<ModelObject1>类型的变量,因为它们的类型不同。

答案 1 :(得分:2)

由于类型擦除,DataManager<ModelObject1>()在创建时实际上DataManager<ModelObject2>()完全相同,所以从这个角度来看,没有理由不重复使用 - 正确的铸造后。

然而,有一些警告。如果您修改对象以包含对特定于定义类的内容的引用,那么事情会变得复杂:

这样的事情意味着您无法安全地重复使用该对象:

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

我强烈建议不要没有很好的理由反对它。也许如果创建经理是一个非常繁重的过程,你可以证明重用它们是合理的。

此代码编译得很好,但我会在演员表之前或ss.clear()之后强烈推荐is.clear(),否则您最终会得到包含Set<integer>的{​​{1}}:< / p>

String