如何在类中存储变量值,即“设置”?

时间:2017-03-29 15:45:15

标签: java javafx

行。在花了几个小时试图让事情发挥作用后,我放弃了。

基本上我正在创建一个用户输入一些值的程序,然后在按下按钮后创建一个新场景,并根据给出的值,发生不同的事情。 我的问题 - 我创建了“Settings.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) {        
}
}
}

和crèmedelacrème,有问题的课程:

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";
}
}
}

4 个答案:

答案 0 :(得分:1)

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

在你的" ProblematicOne"中查看这一行。 private Setting settings = new Settings();

您刚刚创建了一个新的设置实例。此实例不了解Controller中的Settings实例。

另一种方法是让您的Settings类成为单例,然后重复使用它。例如:

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;
    }
}

然后在Controller类中,使用getInstance()方法获取实例;

private Settings settings = Settings.getInstance();

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

答案 1 :(得分:0)

您的问题是ProblematicClass会创建一个新的设置实例,因此无法访问该值。您需要将同一个实例传递给另一个类,或者将设置类中的变量设置为静态,这样您就可以在不使用实例的情况下访问它们:

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();

答案 2 :(得分:0)

在下面的类中没有设置对象的设置值,你试图使用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";
}
}
}

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

答案 3 :(得分:0)

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

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

并且您希望在QuestionmaticOne类中的第二个实例中检索此值。 尝试通过在Controller类中仅实例化一次Settings并将其传递给ProblematicOne来解决此问题。对代码进行框架以便实例化

    private Setting settings = new Settings();

在整个申请中只有一次。考虑使这个类单身。在这里阅读关于单例实例化的内容 http://www.javaworld.com/article/2073352/core-java/simply-singleton.html