无法使用getter访问变量

时间:2014-06-22 11:21:06

标签: java setter getter

所以嘿伙计们,我正在编写一个脚本我正在编写(使用自定义api和东西) 所以我所拥有的是一个主类,我使用GUI中的数据来编辑ScriptVariables类中的变量,如下所示:

GUI g = new GUI();     
ScriptVariables sv = new ScriptVariables();   
String foodNameString = g.textField.getText();
sv.setFoodName(foodNameString);

String amountString = g.textField_1.getText();
int amountInt = Integer.parseInt(amountString);
sv.setAmount(amountInt);

double healthPercentageValue = g.slider.getValue();
sv.setHealthPercentage(healthPercentageValue);

(Ps:我用getter记录了这个,这个位工作正常) 现在在另一个类中,我尝试访问它,之前的代码执行后,我这样做:

ScriptVariables sv = new ScriptVariables();

String foodName2 = sv.getFoodName();
int amount2 = sv.getAmount(); 

现在的问题是,当我记录这些变量时,我为字符串获取null,为int获取0。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您正在访问ScriptVariables的两个不同实例,因此他们不会共享实例变量。您在第一个实例上设置了textfoodName属性的事实不会影响您在其他类中创建的新实例。

您可以执行textfoodName属性static,或将对第一个ScriptVariables实例的引用传递给第二段代码。< / p>

答案 1 :(得分:1)

ScriptVariables sv = new ScriptVariables();正在创建一个与您之前设置其字段的实例不同的实例(foodNameamount)。此新实例的foodNameamount字段仍未初始化,因此为null和零值。

假设您的第二个类是ScriptVariablesAccessor,那么您可以在其类定义中包含类型为ScriptVariables的字段。然后,该字段将用于通过构造函数或setter方法传递先前填充的实例。

public class ScriptVariablesAccessor {
   private ScriptVariables sv;

   public ScriptVariablesAccessor(ScriptVariables sv) {
      this.sv = sv;
   }

   // or use a setter
   public void setScriptVariables(ScriptVariables sv) {
      this.sv = sv;
   }

   public void processVariables() {
      String foodName = sv.getFoodName();
      int amount = sv.getAmount();
      // do something with foodName and amount;
   }
}

以下是如何使用准备好的ScriptVariables

来调用此课程
ScriptVariablesAccessor svAccessor = new ScriptVariablesAccessor(sv);
svAccessor.processVariables();

答案 2 :(得分:0)

您创建了两个不同的ScriptVariables个对象。

可以在foodNameString中创建

amountStringstatic,并且由于您是从其他班级获取的,因此可以将其设置为publicprotected但不是private,请致电ClassName.amountString获取价值。

或者您可以应用Singleton模式。

或者只是简单地将ScriptVariables对象或那些字符串传递给另一个类的方法。