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

时间:2013-12-14 11:29:48

标签: java extends implements

我需要在一个类中有一个变量,它是类“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,因此这个解决方案不起作用。

2 个答案:

答案 0 :(得分:1)

我找到了一个相当狡猾的解决方法。

该类包含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方法,但是如果我这样做的话,可能必须有一个版本来获取接口和版本才能获得该类。

答案 1 :(得分:0)

您可以使用通用类类型执行此操作:

private class ClassB <R extends ClassA & InterfaceI> {
    R mVaraible;
}