是否有一些“最佳实践”如何声明实现两个接口(interface)的变量?
假设您的方法需要一个对象来同时实现 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 {}
所以如果你想跳过容器接口(interface),你可以使用抽象。它不是 super 优雅,但很实用,除了不使用界面外没有真正的缺点。
不同的方法:您可以使用 generics有多个上限:
<T extends InterfaceA&InterfaceB> void doSomething(T argument) {
}
关于java - 使用两个接口(interface)声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446952/