【问题标题】:How to set a value into a variable from one class and get that variable's value from other class?如何将一个值设置为一个类的变量并从另一个类获取该变量的值?
【发布时间】:2018-01-05 14:28:00
【问题描述】:

我想将数据设置到一个类的变量中,并想在另一个类中获取该变量的数据。

我已经测试了一个例子。但我得到空值。

示例类Data:

public class Data {

    private String text;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

MainActivity 类中,我做了一组:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Data data = new Data();
        data.setText("HELLO");
        System.out.println("GET from Main class: " + data.getText());

        // Call the get class method
        Test test = new Test();
        test.execute();
    }

测试类:

public class Test {

    public void execute() {

        Data data = new Data();
        System.out.println(" GET from Test class: " + data.getText());

    }

}

输出:

I/System.out: GET from Main class: HELLO
I/System.out:  GET from Test class: null

如何访问 Main 类?

谢谢。

【问题讨论】:

  • 它为空,因为您只为该类的特定实例设置了该值。由于您的其他班级无权访问,但创建了一个新班级,因此它为空
  • 将该变量作为参数传递给您的执行方法。但是,说真的,如果你不知道这一点:停止你正在做的事情,开始学习基础知识。这会花费你一些时间,但它会让你浪费更多的时间试图弄清楚这样的事情

标签: java android get set getter-setter


【解决方案1】:

您需要说 data 变量是一个静态变量,这意味着它对于所有 Data 实例都是相同的。完成此操作后,您就不需要 Data 实例了。

public class Data {
    private static String sText;

    public static String getText() {
        return sText;
    }

    public static void setText(String text) {
        sText = text;
    }
}

然后你静态调用数据。 Data.getText() 和 Data.setText("hello")

编辑: 但正如 Stultuske 所写,你应该复习基础知识。我的“解决方案”将修复您的测试,但它不是一个好的解决方案,因为一旦您开始处理更大的应用程序,将所有内容都全局化会导致一团糟。

【讨论】:

  • 感谢您的“解决方案”,但正如您所说,这并不好。我将尝试通过参数将值传递给execute () 方法。问候。
【解决方案2】:

它是空的,因为你从数据创建了新对象!!!如果您想从 Data 中获取值,则必须将 Data 对象传递给您的 Test 方法。

【讨论】:

    【解决方案3】:

    目前的做法,execute() 无法知道对象的值,因为它是一个新对象。你有两个解决方案:

    • 您可以将text 变量放在static 中:这样,该值将被所有实例共享。任何Data 对象都可以更改text 的值,并且您可以在不创建实例的情况下更改变量。

    • 您还可以在execute() 函数的参数中传递Data 对象。这样,您将创建的每个 Data 对象都将拥有自己的 text 变量。

    【讨论】:

    • 感谢回复,我会考虑在参数中传递Data对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多