java - 调用对象的方法,即接口(interface)的实例

标签 java interface instanceof

我有一个ClassA数组,它没有实现任何接口(interface)。但是有一个 ClassB 和一个 ClassC,它们都实现了接口(interface) 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 条件。那么,如果您不为 ClassA 实现抽象 methodA(),您会怎么做?

最佳答案

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

for (final ObjectA a : myArray) {
    if (a instanceof InterfaceA) {
        result += ((InterfaceA)a).methodA();
    }
}

关于java - 调用对象的方法,即接口(interface)的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119616/

相关文章:

java - Java 系统属性存储在 Mac 上的什么位置?

Java:传递相同对象作为参数的对象构造函数

go - 获取基于原始类型的类型的 reflect.Kind

JavaScript 继承和构造函数属性

java - 如何打印存储在数组中的对象的实例

java - 检查对象是否是类的实例(但不是其子类的实例)

java - 无法使用 java eclipse 通过 lambda 函数将项目插入 dynamodb

java - 根据列条目类型对值进行排名

Java 接口(interface)实现 - 自动初始化器

c# - 扩展方法可以应用于接口(interface)吗?