必须扩展A类并实现某些接口的成员变量

jte*_*dit 5 java extends implements

我需要在类中有一个变量,它是类"ClassA"的实例,但它也实现了接口"InterfaceI".

显然,这可以很容易地为一个或另一个完成:

private ClassA mVariable;
private InterfaceI mVaraible;
Run Code Online (Sandbox Code Playgroud)

但是如何强制对象既扩展了ClassA又实现了InterfaceB?就像是:

private <? extends ClassA & InterfaceI> mVaraible;
Run Code Online (Sandbox Code Playgroud)

是我需要的,但我不知道语法或甚至可能.我还需要一个get和set方法,但这可以用泛型来完成(我想?)

明显的解决方案是

public class ClassB extends ClassA implements InterfaceI{
    //whatever here
}
Run Code Online (Sandbox Code Playgroud)

但是,InterfaceI和ClassA都是外部库的一部分,这个库有扩展ClassA和InterfaceI的类,我不能编辑它们以使它们扩展ClassB,因此这个解决方案不起作用.

jte*_*dit 1

我找到了一个相当老套的解决方法。

该类包含 ClassA 和 InterfaceI 引用,如下所示:

private ClassA mItemClassA;
private InterfaceI mItemInterfaceI;
Run Code Online (Sandbox Code Playgroud)

set 方法如下所示:

public void setVaraible(ClassA item){
    assert (item instanceof InterfaceI);
    mItemClassA = item;
    mItemInterfaceI = (InterfaceI) item;
}
Run Code Online (Sandbox Code Playgroud)

如果该项目不是 InterfaceI 的实例,则此方法的其他变体可能会引发异常、返回 false 等

然后,类中的其他方法可以使用 mItemClassA 和 mItemInterfaceI 调用 InterfaceI 和 ClassA 中的函数。

我现在不打算实现 get 方法,但如果我这样做,可能必须有一个版本来获取接口和一个版本来获取类。