簡體   English   中英

必須擴展A類並實現某些接口的成員變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM