Tôi hiện đang phát triển một khung mô phỏng trọng lượng nhẹ, có mục đích chung. Mục đích là để cho phép mọi người phân lớp các đối tượng Mô phỏng và Kịch bản cho các nhu cầu cụ thể theo miền của họ. Generics dường như là một cách thích hợp để đạt được điều này, nhưng tôi sợ rằng tôi có thể nhúng vào địa ngục Generics.Java Generics Hell - Vượt qua điều này nhưng nó muốn gõ T
Đối tượng Sim
cung cấp quyền truy cập vào các đối tượng mô phỏng và điều khiển sim (bắt đầu/tạm dừng/dừng)
Đối tượng Scenario
cho phép bạn để cư Sim với các thực thể mô phỏng.
Sim:
public class Sim
{
public <T extends Sim> void loadScenario(Scenario<T> scenario)
{
reset();
scenario.load(this);
}
}
Kịch bản:
public interface Scenario<T extends Sim>
{
public void load(T sim);
}
Mục đích là để cho phép người dùng tạo ra một MySim
rằng extends Sim
và MyScenario
rằng implements Scenario<MySim>
cho tên miền của họ.
ví dụ: MyScenario:
public class MyScenario<MySim>
{
public void load(MySim sim)
{
// make calls to sim.addMySimEntity(...)
}
}
Cụ thể, sử dụng đoạn mã trên, các scenario.load(this)
cuộc gọi trong Sim.loadScenario
mang lại cho tôi những lỗi: Phương pháp tải (T) trong các loại Kịch bản không áp dụng cho các đối số (Sim). Tôi hiểu điều này là bởi vì tôi đang tải this
(có loại Sim
) khi những gì được yêu cầu là T extends Sim
có nghĩa là bằng cách nào đó tôi nên đi qua một đối tượng có thể là bất kỳ loại phụ nào của Sim.
Cách khắc phục vấn đề này để đạt được những gì tôi muốn đạt được là gì? Hoặc, nó thậm chí có thể? Có lẽ generics không thể làm điều này cho tôi.
Tôi nghĩ rằng điều này có thể liên quan đến câu hỏi tôi đã hỏi về tham chiếu chung vòng tròn: http://stackoverflow.com/questions/2567595/creating-circular-generic-references –