道歉爲通用標題,我真的不能想出一種方式來解釋這一點。仿製藥混淆
我想其中一個系統提供設施給用戶,其中有相關的應用請求對這些設施政策的場景建模。
public interface Facility {
public List<Policy> getPolicies();
}
public interface Policy {
public void apply(Facility facility, Request request);
}
public interface Request {
}
但請求只能是明智的特定類型的設施,以及政策真的可以只適用於一個類型的設施和類型的特定於該類型的設施要求。
public interface Facility<F extends Facility<F>> {
public List<Policy<F, ? extends Request<F>>> getPolicies();
}
public interface Policy<F extends Facility<F>, R extends Request<F>> {
public void apply(F facility, R request);
}
public interface Request<F extends Facility<F>> {
}
但我還希望能夠指定總體策略,以便它們可以應用於任何Facility超類型。
public interface Facility<F extends Facility<F>> {
public List<Policy<? super F, ? extends Request<F>>> getPolicies();
}
但實際上你只想查詢適用於設施的特定類型的請求的策略。
public interface Facility<F extends Facility<F>> {
public <R extends Request<F>> List<Policy<? super F, R>> getPolicies();
}
我的問題是現在我所有的仿製藥很困惑,我不能夠甚至創建適用於所有設施,這將是這樣一個策略類,如果它是合法的
public class GeneralPolicy implements Policy<T extends Facility<T>, Request<T>>
我該如何去關聯設施,政策和請求的類型,以便根據上述說明有意義?我相信人們會要求澄清,我已經與這個足夠長的時間作鬥爭,以至於我可能沒有解釋某些東西,或者完全錯過了一個明顯的觀點。
泛型的問題是,你可以定義一些如此通用的東西,這對編譯器來說並不意味着什麼。嘗試簡化你的模型。 –
簡化模型將不可避免地導致API的客戶端必須做各種未經檢查的強制轉換,並作出編譯器無法保證的假設。避免這是泛型背後的全部原因。這些要求是相當可以理解的,我想我只是懷疑我一直在盯着我太久的努力,才能忘記問題的出路,並提出一個乾淨的解決方案。因此,SO問題。 – ptomli