Java:静态检查两对类是否实现了某个函数 [closed]

Java: Statically check that two pair of classes implement a certain function [closed]

提问人:zabbir 提问时间:11/5/2023 最后编辑:user207421zabbir 更新时间:11/5/2023 访问量:47

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

19天前关闭。

假设我有两个抽象类和 .有没有办法确保( extends , extends )的每个组合都有一定的定义?我想确保代码不会编译,如果即使有两个子项的一个组合没有提供 .A1A2C1A1C2A2operation()operation()

Java 继承 抽象类

评论

0赞 Jim Garrison 11/5/2023
这里没有足够的信息。A1 和 A2 有什么关系(如果有的话)?“(C1 扩展 A1,C2 扩展 A2)的每个组合”是什么意思?请更明确,并提供您要完成的任务的真实代码示例。
0赞 zabbir 11/5/2023
举个例子,有一个抽象类和抽象类。我想为每个可能的子组合实现一个函数,并在编译时验证是否有这样的实现。例如,如果有两个孩子:和 ,以及一个 IO:,我想确保有 for (, ) 和 (, )。IOQuestionvalidate()QuestionMultipleChoiceEssayConsolevalidate()EssayConsoleMultipleChoiceConsole
0赞 tgdavies 11/5/2023
编辑您的问题,而不是在评论中澄清。什么是?那不是 Java。(Essay, Console)

答:

0赞 Juan C Nuno 11/5/2023 #1

定义 HasOperation 接口

interface HasOperation {
    void operation();
}

让 A1 和 A2 实现 HasOperation 接口,但不实现操作方法

abstract class A1 implements HasOperation {
}

A1 和 A2 的每个具体(非抽象)子类都需要实现操作方法

1赞 Reilas 11/5/2023 #2

"...有没有办法确保(C1 扩展 A1,C2 扩展 A2)的每个组合都定义了某个 operation()?..."

操作方法标记为抽象,或使用接口

"...我想确保代码不会编译,如果即使有两个子项的组合没有提供 operation() 的实现。..."

这将导致 A1A2 的任何子类都需要实现操作

abstract class A {
    abstract void operation();
}

abstract class A1 extends A { }

abstract class A2 extends A { }

class C1 extends A1 {
    @Override
    public void operation() {

    }
}

class C2 extends A2 {
    @Override
    public void operation() {

    }
}