![](/img/trans.png)
[英]Does Map interface extend or implement some other interface or class?
[英]Member variable which must extend class A and implement some interface
我需要在類中有一個變量,它是類“ClassA”的實例,但它也實現了接口“InterfaceI”。
顯然,這可以很容易地為一個或另一個完成:
private ClassA mVariable;
private InterfaceI mVaraible;
但是如何強制對象既擴展了ClassA又實現了InterfaceB? 就像是:
private <? extends ClassA & InterfaceI> mVaraible;
是我需要的,但我不知道語法或甚至可能。 我還需要一個get和set方法,但這可以用泛型來完成(我想?)
明顯的解決方案是
public class ClassB extends ClassA implements InterfaceI{
//whatever here
}
但是,InterfaceI和ClassA都是外部庫的一部分,這個庫有擴展ClassA和InterfaceI的類,我不能編輯它們以使它們擴展ClassB,因此這個解決方案不起作用。
我找到了一個相當hacky的解決方法。
該類包含ClassA和InterfaceI引用,如下所示:
private ClassA mItemClassA;
private InterfaceI mItemInterfaceI;
然后set方法如下所示:
public void setVaraible(ClassA item){
assert (item instanceof InterfaceI);
mItemClassA = item;
mItemInterfaceI = (InterfaceI) item;
}
如果該項不是InterfaceI的實例,則其他變體可能是拋出異常,返回false等
然后,類中的其他方法可以使用mItemClassA和mItemInterfaceI從InterfaceI和ClassA調用函數。
我現在不打算實現get方法,但是如果我這樣做的話,可能必須有一個版本來獲取接口和一個版本來獲取類。
您可以使用泛型類類型執行此操作,如下所示:
private class ClassB <R extends ClassA & InterfaceI> {
R mVaraible;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.