0

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

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

2 回答 2

3

那不会编译。您不能将 a 分配给DataManager<ModelObject2>type 的变量DataManager<ModelObject1>,因为它们不是同一类型。

于 2013-02-09T23:58:41.973 回答
2

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

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

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

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

但是,我强烈建议不要这样做,但没有很好的理由。也许如果创建管理器是一个非常繁重的过程,您可以证明重用它们是合理的。

这段代码编译得很好,但我强烈推荐ss.clear()在演员阵容之前或is.clear()之后,否则你最终会得到一个Set<integer>包含 a 的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;
} 
于 2013-02-10T00:22:45.763 回答