问题描述
我正在尝试创建一个用于在 Java 中执行事务的库类。这是代码示例。
class AbstractRepo {
<T extends AbstractRepo> void transactional(Consumer<T> consumer) {
System.out.println("Transaction started.");
consumer.accept((T) this); //try-catch removed for brevity
System.out.println("Transaction finished.");
}
}
class PersonRepo extends AbstractRepo {
void addPerson() {
System.out.println("Adding person.");
}
void addAddress() {
System.out.println("Adding address.");
}
}
public class Application {
public static void main(String[] args) {
var personRepo = new PersonRepo();
personRepo.<PersonRepo>transactional(it -> {
it.addPerson();
it.addAddress();
});
}
}
每当 PersonRepo 调用事务性时,它都应始终采用类型为 Consumer<PersonRepo>
的参数。但是,从上面的代码可以看出,客户端需要添加泛型来执行personRepo的操作。
class AbstractRepo<T extends AbstractRepo> {
void transactional(Consumer<T> consumer) {
}
}
class PersonRepo extends AbstractRepo<PersonRepo> {
}
public class Application {
public static void main(String[] args) {
var personRepo = new PersonRepo();
personRepo.transactional(it -> {
it.addPerson();
it.addAddress();
});
}
}
现在客户端可以在不添加泛型的情况下调用 transactional()
。但是,这使得代码比现在更奇怪。我认为我以完全错误的方式处理这个问题。有没有更好的办法? 我想在超类中实现一个方法,该方法将其实现(调用)子类的 Consumer 作为其参数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)