加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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等的类型层次结构.

缺点是如果从多个地方调用此方法,可能会有很多地方更改签名 – 但很容易让编译器找出需要多长时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读