java – 帮助创建泛型类以避免代码重复
发布时间:2020-12-15 05:04:09 所属栏目:Java 来源:网络整理
导读:我有一个简单的问题,尝试使用Appengine保持DRY. 除了作为参数发送的对象外,下面的两个函数是相同的.实际上我有15个这样的功能.我试图找到一种方法来创建一个超类或通用来实现这一点. public void deleteRecord(Person s) { PersistenceManager pm = PMF.get(
我有一个简单的问题,尝试使用Appengine保持DRY.
除了作为参数发送的对象外,下面的两个函数是相同的.实际上我有15个这样的功能.我试图找到一种方法来创建一个超类或通用来实现这一点. public void deleteRecord(Person s) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { Person p = pm.getObjectById(Person.class,s.getId()); pm.deletePersistent(p); } finally { pm.close(); } } 和 public void deleteRecord(Product s) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { Product p = pm.getObjectById(Product.class,s.getId()); pm.deletePersistent(p); } finally { pm.close(); } } 不幸的是,似乎我不能使用泛型,因为泛型不支持T.class. 任何好的建议如何做到这一点不复制? 谢谢. 解决方法
干是一个很好的原则. KISS也是如此;-)
public void deleteRecord(Class classOfProduct,Object id) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { Object p = pm.getObjectById(classOfProduct,id); pm.deletePersistent(p); } finally { pm.close(); } } 这将被调用,例如: theObject.deleteRecord(Person.class,s.getId()); theObject.deleteRecord(Product.class,s.getId()); 由于这是一个void方法,并且PersistenceManager似乎不适用于泛型类型,我建议避免使用泛型.如果适用,此方法还有额外的好处,您无需修改??Product,Person等的类型层次结构. 缺点是如果从多个地方调用此方法,可能会有很多地方更改签名 – 但很容易让编译器找出需要多长时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |