对象的调用方法,即Interface的实例

问题描述 投票:1回答:1

我有一个ClassA数组,它不实现任何接口。但是有一个ClassB和一个ClassC,它们都实现了接口InterfaceAInterfaceA看起来像这样:

public interface InterfaceA {
    int methodA();
}

现在我想迭代我的ClassA实例数组(其中还包含ClassBClassC的一些实例),我想得到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,你会怎么做?

java interface instanceof
1个回答
2
投票

你应该使用强制转换来让编译器满意。在你的代码中,methodA在a上调用,它可以是ClassA,ClassB或其他任何东西的实例。由于您已经限制非interfaceA实例到达IF块,因此您可以使用类型转换。

for (final ObjectA a : myArray) {
    if (a instanceof InterfaceA) {
        result += ((InterfaceA)a).methodA();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.