gpt4 book ai didi

java - 无限递归组合类

转载 作者:行者123 更新时间:2023-11-29 07:33:38 25 4
gpt4 key购买 nike

我的程序中有一个无限递归,我在一个类中有一个字段,该字段中有相同的类。他们是单例,但这并不是他们不 build 的原因。顺便说一下,我编写的程序实际上无法删除相位数组。

abstract class Phase{
protected String phaseName;
protected char[] keys;
protected String[] commands;
protected Phase[] phases;
protected StringBuilder pattern;

}

class RemotePhase extends Phase{
private static RemotePhase remotePhase;

protected RemotePhase(){
phaseName="Remote.";
commands=new String[]{"Lock/unlock windows", "Toggle door", "Select dog menu"};
setPattern();

//Just below here starts an infinite loop
phases=new Phase[]{FixWindows.getFixWindows(), ToggleDoor.getToggleDoor(), SelectDogPhase.getSelectDogPhase()};

}

public static RemotePhase getRemotePhase(){
if(remotePhase==null){
remotePhase=new RemotePhase();
}
return remotePhase;
}
}

final class FixWindows extends Phase{
private static FixWindows windows;
private RemotePhase remotePhase;

private FixWindows(){

//execution keeps coming here as FixWindows object is never constructed
remotePhase=RemotePhase.getRemotePhase();

}

public static FixWindows getFixWindows(){
if(windows==null){
windows=new FixWindows();
}
return windows;
}
}

我曾尝试将 RemotePhase 设为静态类,FixWindows 将其用于其成员,但我在尝试覆盖抽象类的非静态方法并尝试在非静态上下文中从 FixWindows 调用它们时遇到了错误。不过,我不想让它成为静态的,因为我必须创建一个额外的类来引用 RemotePhase。

尽管有任何方法可以使这项工作正常进行。谢谢

最佳答案

为什么您需要存储对单例的引用,而您始终可以通过静态 getter 访问它?这将允许从 FixWindows 延迟访问 RemotePhase,并修复您的循环依赖。因此,最干净的修复方法就是不要在 FixWindows 的构造函数中调用 getter。

final class FixWindows extends Phase{
private static FixWindows windows;

private FixWindows(){
// does nothing but preventing external classes to instantiate it
}

public static synchronized FixWindows getFixWindows(){
if(windows==null){
windows=new FixWindows();
}
return windows;
}

public void methodThatRequiresTheRemotePhase(){
doSomeStuff(RemotePhase.getRemotePhase());
}
}

顺便说一句,我应该警告你,你的代码不是线程安全的。您的 setter/getter 应该同步。

关于java - 无限递归组合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810165/

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