如何将变量值存储在类中,即"settings"?



OK.在花了几个小时试图让事情顺利进行之后,我放弃了。

基本上,我正在创建一个程序,其中用户输入一些值,然后在点击按钮后创建一个新场景,并根据给定的值,发生不同的事情。我的问题 - 我创建了"设置.class",其中包含一些带有 getter 和 setter 的变量。我的假设是将输入的值存储在那里,并且在需要时,我可以使用getter轻松访问它们。由于某种原因,它不起作用。

请记住,我尽可能地简化了它,因为它看起来非常混乱,如果我粘贴原始代码,它会很长。我确保问题的核心是相同的。

设置类:

public class Settings {    
private boolean diamonds;  
public boolean getDiamonds() {
    return diamonds;
}
public void setDiamonds(boolean diamonds) {
    this.diamonds = diamonds;
}
}

控制器类:

public class Controller implements Initializable {
private Settings settings = new Settings();
private ProblematicOne prob = new ProblematicOne();
public void handleGoAction() throws IOException {
settings.setDiamonds(true);    
prob.editText("This shall be set");
/* ..creating new stage and scene here no reason to paste it here, no probs with that.. */
@Override
public void initialize(URL location, ResourceBundle resources) {        
}
}
}

和奶油,有问题的类:

public class ProblematicOne{
private Setting settings = new Settings();
String toBeEdited = "";  // 
public void editText(String text){
if(settings.getDiamonds){      // for some reason it doesn't work; The getter returns false.
    toBeEdited = text;
}else if(!settings.getDiamonds){
    toBeEdited = "getDiamonds is false";
}
}
}

好的,首先,您尝试做的事情可以通过序列化对象(即设置(并存储它来实现。或者,更简单地说,只需写入带有值的文件,并在要实例化类时从那里加载。

看看你的"有问题的人"中的这一行 private Setting settings = new Settings();

您刚刚创建了"设置"的新实例。此实例不知道控制器中的设置实例。

另一种方法是将设置类设置为单例,然后重用它。例:

设置.java

public class Settings {  
    private static Settings instance = null;
    private boolean diamonds;  
    public boolean getDiamonds() {
        return diamonds;
    }
    public void setDiamonds(boolean diamonds) {
        this.diamonds = diamonds;
    }
    private Settings() {}
    public static Settings getInstance(){
        return instance == null ? new Settings() : instance;
    }
}

然后在控制器类中,只需使用 getInstance() 方法获取实例;

private Settings settings = Settings.getInstance();

同样,当您在 ProblemOne 类中再次使用它时,请使用 getInstance() 方法

您的问题是 ProblemClass 创建了一个新的设置实例,因此无法访问该值。您需要将相同的实例传递到另一个类中,或者将设置类中的变量设置为静态,以便您可以在没有实例的情况下访问它们:

public class Settings {    
    private static boolean diamonds;  
    public static boolean getDiamonds() {
        return diamonds;
    }
    public static void setDiamonds(boolean diamonds) {
        this.diamonds = diamonds;
    }
}

并在没有实例的情况下使用它:

Settings.setDiamonds(true);
Settings.getDiamonds();

在以下类中没有将值设置为设置对象,您正在尝试使用 get,它将返回默认值。

public class ProblematicOne{
private Setting settings = new Settings();
String toBeEdited = "";  // 
public void editText(String text){
if(settings.getDiamonds){      // for some reason it doesn't work; The getter returns false.
    toBeEdited = text;
}else if(!settings.getDiamonds){
    toBeEdited = "getDiamonds is false";
}
}
}

如果要使用在控制器中创建的设置对象,则将设置对象传递给 ProblemOne 类中的 editText 方法。

问题是你正在实例化设置类两次。您设置

    settings.setDiamonds(true); //in one instance

并且您希望在类 ProblemOne 的第二个实例中检索此值。尝试通过在控制器类中仅实例化一次设置并将其传递给 ProblemOne 来解决此问题。构建代码,以便实例化

    private Setting settings = new Settings();

在整个应用程序中只有一次。考虑使此类成为单例。在此处阅读有关单例实例化的信息http://www.javaworld.com/article/2073352/core-java/simply-singleton.html

最新更新