对象的调用方法,即接口的实例
Call method of Objects, that are instances of Interface
我有一个 ClassA
的数组,它没有实现任何接口。但是有一个 ClassB
和一个 ClassC
,它们都实现了接口 InterfaceA
。 InterfaceA
看起来像这样:
public interface InterfaceA {
int methodA();
}
现在我想遍历 ClassA
的实例数组(其中还包含一些 ClassB
和 ClassC
的实例),我想得到每个结果的总和methodA()
.
在运行时,以下代码应该可以工作(imO):
myArray = new ObjectA[10];
// how the Array gets it's content is irrelevant here
int result = 0;
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += a.methodA();
}
}
但是由于 ClassA
不一定有 methodA()
,我的编译器对此不满意。它认为 a.methodA()
未定义,因为编译器不知道 if 条件。那么,如果你不实现抽象 methodA()
到 ClassA
,你会怎么做?
您应该使用强制转换来让您的编译器满意。在您的代码中,方法 A 在 a
上调用,它可以是 ClassA、ClassB 或其他任何实例。
由于您已经限制非 interfaceA 实例进入 IF 块,因此您可以使用类型转换。
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += ((InterfaceA)a).methodA();
}
}
我有一个 ClassA
的数组,它没有实现任何接口。但是有一个 ClassB
和一个 ClassC
,它们都实现了接口 InterfaceA
。 InterfaceA
看起来像这样:
public interface InterfaceA {
int methodA();
}
现在我想遍历 ClassA
的实例数组(其中还包含一些 ClassB
和 ClassC
的实例),我想得到每个结果的总和methodA()
.
在运行时,以下代码应该可以工作(imO):
myArray = new ObjectA[10];
// how the Array gets it's content is irrelevant here
int result = 0;
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += a.methodA();
}
}
但是由于 ClassA
不一定有 methodA()
,我的编译器对此不满意。它认为 a.methodA()
未定义,因为编译器不知道 if 条件。那么,如果你不实现抽象 methodA()
到 ClassA
,你会怎么做?
您应该使用强制转换来让您的编译器满意。在您的代码中,方法 A 在 a
上调用,它可以是 ClassA、ClassB 或其他任何实例。
由于您已经限制非 interfaceA 实例进入 IF 块,因此您可以使用类型转换。
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += ((InterfaceA)a).methodA();
}
}