Giải pháp của tôi là tránh tất cả các giao diện trong đối tượng liên tục. Vì vậy, BaseContract
trở thành như sau:
public abstract class BaseContract<T extends Code> {
public abstract T getCode();
}
Và PersistentContract
đã được thực hiện theo các lớp cụ thể:
public class PersistentContract extends BaseContract<CodeImpl> {
}
Điều này dường như tạo ra sự cân bằng phù hợp giữa việc mã hóa các giao diện trong lớp cơ sở và đáp ứng nhu cầu của Spring Data đối với các lớp cụ thể.