[英]Java, force implementation of method without knowing parameters
我有一個執行基本操作的抽象類,現在我想強制每個派生類都使用“檢查”方法,但要點是我對該方法一無所知。 例如,抽象類:
public abstract class Service<T extends Transport> {
public T getTransport(int id) {
[...]
}
public abstract boolean checkTransport(T transport, ...);
}
和兩個實現類:
public ServiceAAA extends Service<ClassA> {
public boolean checkTransport(ClassA t) {
[...]
}
}
public ServiceBBB extends Service<ClassB> {
public boolean checkTransport(ClassB t, Integer value, Integer otherValue) {
[...]
}
}
ServiceBBB需要兩個參數來檢查類ClassB的對象t。 當然這是行不通的,有沒有一種方法可以強制子類在不使用“ Object ...”表示法的情況下實現checkTransport方法?
不,沒有。
讓我們假設有一個辦法。 您如何從抽象的Service類或任何引用了此對象類型為Service<...>
調用站點調用此方法? 沒有辦法知道特定子類的方法的期望,因此也就沒有辦法調用該方法。
解決此問題的一種方法是將檢查程序作為類傳遞給Service。 也就是說,使用合成代替繼承。 如果這樣做,則可以使檢查器的界面根本不接受任何額外的參數(例如, Predicate
可能起作用),並且實現該檢查器的特定子類可以在構造時傳遞參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.