gpt4 book ai didi

java - 如何强制第 3 方实现/继承类在 java 中运行泛型方法?

转载 作者:行者123 更新时间:2023-12-01 18:45:50 25 4
gpt4 key购买 nike

编辑1:我所说的泛型并不是指java泛型类的泛型方法,而是我编写的在使用我的程序时必不可少的方法。

我正在尝试编写一个程序(类似于流程集成器),允许第三方开发人员将自己的功能 block 添加到任务网络中。这些片段是从创建的对象,这些类具有runProcess()方法(实现了specialRunnable)。

我不想在调用对象runProcess()方法时强制写入日志条目。但是,我不希望实现(写入日志)既不在第 3 方类中,也不在进行方法调用的类中。

我已经搜索并尝试通过继承和实现接口(interface)来做到这一点,但还没有找到解决方案。这是我希望它如何工作的示例:

 public abstract class Process{

public void runProcess(){
// when runProcess() is called all specialized processes write to log first
writeToLog();
// then do their thing which is defined in their class
doYourProcessSpecificThing();

}

public void writeToLog(){
//writing to log comes here
}

// specialized processes have to define what is done
public abstract void doYourProcessSpecificThing();

专业课:

public class Special3rdPartyProcess  extends Process implements specialRunnable{

runProcess(){
super.runProcess();
}

doYourProcessSpecificThing(){
// this is where the magic happens
}

总结一下我想要的:我希望所有进程都使用 runProcess() 命令启动,并且每当完成时我都需要一个日志条目,但我不希望第三方开发人员决定如何或是否写入条目。我也不希望这样做:

writeToLog();
task1.runProcess();

writeToLog();
task2.runProcess

谢谢!

最佳答案

如果您将 runProcess 方法设为 final,那么子类将无法重写您的方法,这可以确保 writeToLog被调用。

您可以将 writeToLog private 设置为不公开实现。

您可以将 doYourProcessSpecificThing protected 使其无法直接调用,但子类仍然可以定义自己的实现。

这称为 Template Method Pattern 。这允许实现者(您)定义可以覆盖哪些特定行为,同时保留对整个流程/算法的控制。

关于java - 如何强制第 3 方实现/继承类在 java 中运行泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com