用两个接口声明变量

强大的猪肉

是否有一些“最佳实践”如何声明一个实现两个接口的变量?

比方说,你的方法需要一个对象来实现InterfaceA,并InterfaceB在同一时间。

void doSomething( BOTH_INTERFACES argument) {
...
}

您认为实现或模拟此效果的最佳方法是什么?


我想创建一个组合界面

interface InterfaceAB extends InterfaceA, InterfaceB {}

但是我可以将以下对象投给它吗?

class SomeObject implements InterfaceA, InterfaceB {}

其他想法:

我可以做类似的事情:

void doSomething( Object argument) {
    if(!(argument instanceof InterfaceA) || !(argument instanceof InterfaceB)) {
        throw new IllegalArgumentException();
    }
    InterfaceA faceA = (InterfaceA) argument;
    InterfaceB faceB = (InterfaceB) argument;
    // do some stuff with it
}

也许这是丑陋的:

void doSomething( InterfaceA faceA, InterfaceB faceB) {
    if(faceA != faceB) {
        throw new IllegalArgumentException();
    }

    // do some stuff with it
}

您会提出什么建议,您使用/认为最好的是什么?

帕特里克·法夫尔

你会做

interface InterfaceAB extends InterfaceA, InterfaceB {}

并为实施

class SomeObject implements InterfaceAB {}

实际上,如果您有许多子类型,那么通常会有一个抽象类来存储一些通用代码。因此,您将拥有:

class AInterfaceAB implements InterfaceA, InterfaceB {}

因此,如果要跳过容器接口,则可以使用摘要。除了不使用界面之外,它不是超级优雅,而是实用且没有真正的缺点。

不同的方法:您可以使用具有多个上限的泛型

<T extends InterfaceA&InterfaceB> void doSomething(T argument) {
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章