java - 必须扩展类 A 并实现一些接口(interface)的成员变量

标签 java extends implements

我需要在一个类中有一个变量,它是类“ClassA”的一个实例,但它也实现了接口(interface)“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,因此这个解决方案不起作用。

最佳答案

我找到了一个相当棘手的解决方法。

该类同时包含 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 方法,但如果我这样做,可能必须有一个版本来获取接口(interface)和一个版本来获取类。

关于java - 必须扩展类 A 并实现一些接口(interface)的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582721/

相关文章:

java - 固定序列排列

java - Java Android 中的正则表达式

java - 使用 Java 处理 URL 中的特殊字符

java - 如何为可变数量的路径参数编写单个 JAX-RS 资源

javascript - 使用自定义按钮扩展 L.control.zoom

Java:创建实现接口(interface)的类实例的简写形式

javascript - Mootools 1.6 子类初始化方法未被调用

java - Map<String,Class< 的声明有问题吗?扩展序列化>>

list - 在实现类中使用额外的方法实现 Java 接口(interface)

class - Kotlin:如何让 Android Studio 在类的底部实现接口(interface)的功能