如何解决如何从 Java 中的 PersonRepo 中删除泛型 <T extends AbstractRepo>?
我正在尝试创建一个用于在 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 举报,一经查实,本站将立刻删除。