[英]Calling non-generic method from generic method
對於某些特定的對象EX,我有一些非通用方法來重載:
protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}
我想寫一種方法
protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}
並且可以從此方法調用非泛型方法(不使用instanceof運算符;))
不,那將是編譯時錯誤。
類型中的方法internalAdd(IP4BlockObject)不適用於參數(T)
因為您的方法類型為:
protected boolean internalAdd(IP4BlockObject block) {...}
protected boolean internalAdd(IP4NetworkObject network) {...}
對於protected <T extends AbstractEntityObject>boolean internalAdd(T t) {}
您將獲得t
作為T的類型。 因此,如果您致電:
internalAdd(t);
這將給您帶來編譯時錯誤,因為internalAdd()
僅期望IP4BlockObject
或IP4NetworkObject
。
注意:如果所有這些方法都在同一類上,則internalAdd(t);
將會再次調用您的通用方法,因此您將陷入無限循環。
我想IP4BlockObject
和IP4NetworkObject
擴展了AbstractEntityObject
並且您想使用抽象引用在某些重載方法之間進行調度? 我是這樣,我不太了解為此使用通用方法的目的。 為什么不這樣聲明該方法:
boolean internalAdd(AbstractEntityObject object) {}
然后,您需要為給定的對象選擇所需的方法。 沒有使用操作符的instance of
,或者某種多態方法給出派生類的類型,沒有直接的方法可以做到這一點。 作為enum
。
如果要避免這種情況,可以重寫代碼,並允許派生類通過使用某些接口調用它們的多態方法來自行選擇所需的方法。 但這真的值得嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.