【发布时间】:2015-04-23 19:54:29
【问题描述】:
我想在下一种情况下避免代码重复:我有两个类 NewTx 和 GetTx,第一个代表新事务,第二个代表一个事务,它加入当前。目标是使 CRUD 代码尽可能紧凑,因此类通常用作:
List<Users> users = NewTx.loadList("select u from User u");
Student s = GetTx.find(Student.class, '02d7c3fe-e9cf-11e4-8ceb-c7b1b9baf140');
这些类实际上只是在获取事务的方式上有所不同,但它们的所有方法都是静态的,因此似乎无法将逻辑移至父类。
现在我有
public final class NewTx extends Tx {
public static <T> List<T> loadList(String query) {
return tx().call(Tx.<T>getLoadListCallable(query));
}
static Transaction tx() {
return DataSource.createTransaction();
}
正如我之前所说,NewTx 和 GetTx 类只有 tx() 方法不同,其他方法只是获取事务,而不是将工作委托给父 Tx 类。
所以目标是将所有 CRUD 方法如 loadList 移动到父类 Tx。
限制:方法调用必须像以前一样:NewTx.load(...,而不是 NewTx.get().load(..
有什么想法吗?
【问题讨论】:
-
您不能使用实例方法有什么特别的原因吗? (非静态)
-
使用单例。仍然很糟糕,但虽然有效......
标签: java inheritance static static-methods