У меня есть бесконечная рекурсия в моей программе, где у меня есть поле в классе, которое имеет тот же класс в своем поле. Они являются синглтонами, но это не то, что заставляет их не создаваться. По тому, как я написал программу, я фактически не могу удалить массив фаз.
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.
Любые способы заставить эту работу работать. Спасибо
FixWindows
и передайтеRemotePhase
(это), чтобы построить его вgetFixWindows
, или просто установитеremotePhase
вgetFixWindows
. Старайтесь избегать вызова конструктора в другом конструкторе. Ваши статические методы хороши для установки таких вещей - person Ebrahim Pasbani   schedule 07.08.2016