Tôi đang cố gắng tạo ra một số lớp để kiểm soát ứng dụng mô hình xem-người trình bày. Tôi đã đưa ra các định nghĩa sau đây, nhưng tôi đang đấu tranh để tránh các loại generics đệ quy.Có thể đệ quy các Generics Java giữa hai lớp
public abstract class Presenter<V extends View<...?>> {
protected V view;
public Presenter(V view) {
this.view = view;
}
// ...
}
public abstract class View<P extends Presenter<...?>> {
protected P presenter;
// ...
}
Tôi muốn thực thi mối quan hệ chung giữa hai lớp. Ý tưởng là tôi có thể khởi tạo một Presenter cho một View cụ thể, với cả hai lớp dựa trên các phương thức hữu ích được định nghĩa trong các lớp cơ sở trừu tượng, nhưng cả hai đều biết chính xác lớp con của lớp trừu tượng đối tác đang được sử dụng.
Vấn đề của tôi là xác định phần ..?
của mã. Tôi không thể nhìn thấy một cách để tránh một tình huống đệ quy, chẳng hạn như:
public abstract class View<P extends Presenter<V>, V extends View<Q>, Q extends...>
và thậm chí định nghĩa đó là không phù hợp, như lớp View bây giờ có hai tham số chung ... nhầm lẫn khối lượng.
tôi về cơ bản muốn tránh các lớp học được rải rác với tham chiếu đến kiểu lớp trừu tượng, đòi hỏi phải rất nhiều đúc suốt triển khai cụ thể, như sau:
// simpler option
public abstract class Presenter {
protected View view;
public Presenter(View view) {
this.view = view;
}
}
public class FooPresenter extends Presenter {
public FooPresenter(BarView view) {
super(view);
}
public someMethod() {
((BarView) getView()).viewSpecificMethod();
}
}
Mỗi thực hiện cụ thể của các lớp này sẽ cần phải liên tục chuyển từ kiểu trừu tượng sang kiểu "biết" đang được sử dụng.
Tuyệt vời, đó là thực hiện các trick! Cảm ơn. –