所以嘿伙计们,我正在编写一个脚本我正在编写(使用自定义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。
有什么想法吗?
答案 0 :(得分:2)
您正在访问ScriptVariables
的两个不同实例,因此他们不会共享实例变量。您在第一个实例上设置了text
和foodName
属性的事实不会影响您在其他类中创建的新实例。
您可以执行text
和foodName
属性static
,或将对第一个ScriptVariables
实例的引用传递给第二段代码。< / p>
答案 1 :(得分:1)
ScriptVariables sv = new ScriptVariables();
正在创建一个与您之前设置其字段的实例不同的实例(foodName
和amount
)。此新实例的foodName
和amount
字段仍未初始化,因此为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
中创建 amountString
和static
,并且由于您是从其他班级获取的,因此可以将其设置为public
或protected
但不是private
,请致电ClassName.amountString
获取价值。
或者您可以应用Singleton
模式。
或者只是简单地将ScriptVariables
对象或那些字符串传递给另一个类的方法。