【问题标题】:How to properly declare static variables in android?如何在android中正确声明静态变量?
【发布时间】:2016-05-14 09:09:52
【问题描述】:

我进退两难,因为我不知道什么是更好的解决方案。我有一个静态变量。

我想知道声明这些变量的最佳做法是什么。 假设我在 myStatic 类中有这样一个变量。

public class myStatic(){

    public static int integer = 0;

    /* get value */
    public int getInteger() {
        return integer;
    }

    /* set value */
    public void setInteger(int nInteger) {
        integer = nInteger;
    }

}

现在我必须增加或减少这个变量。 如何正确操作?

1)

myStatic.integer++;

2)

myStatic mystatic = new myStatic();
int integer = mystatic.getInteger();
int nInteger = integer+1;

mystatic.setInteger(iInteger);

使用解决方案 1 或 2 更好吗?

【问题讨论】:

  • 只是我的两分钱,因为我从未在硬混凝土中见过这是首选,但一般来说,在我的个人代码中,我直接访问静态变量而不是使用 getter 和 setter。阅读我的代码时,如果我正在使用静态变量或不使用静态变量,它往往会让我更容易阅读。
  • 他们在这里基本上都在做同样的事情。虽然如果你打算通过选项 2 来做,那么真的不需要一个整数是静态的。
  • 最好完全避免静态;你的项目越大,你就越讨厌静态变量。
  • 这不是使用静态变量的好例子。单例似乎更适合您的情况。
  • 你能告诉我为什么吗?

标签: java android static global-variables static-methods


【解决方案1】:

我会选择 数字 1,100%,也许只是因为我很懒,但有点也是因为:

每条知识在系统中都必须有一个单一的、明确的、权威的表示。

在我多年的软件工程工作中,这条原则是一个关键,也是一个巨大的成功。当今软件工程师和开发人员的一个常见问题是他们倾向于使问题过于复杂。

极限编程 (XP) 原则指出程序员在认为必要之前不应添加功能。

【讨论】:

  • 我看到了这些链接的意义,并且在某种程度上同意它,但是我在实践中发现,如果您有时间添加一个功能,即使目前不需要它,它也可以将来不必再回来重构它并添加您想要的功能,从而节省大量时间。在编写新代码的方法中进行前瞻性思考通常是值得的。
  • @Devsil 是的,我想说这真的取决于您对某个功能的感觉以及您如何将其可视化,如果它将成为您系统的核心功能,您宁愿拥有在你实际使用它之前就已经定义好了。
  • @Devsil And... 访问静态变量不应涉及任何系统的任何核心功能,正如 Andrew 所提到的。它可能会导致内存泄漏,并且很难测试。
【解决方案2】:

如果需要随时随地访问该变量,则应使用选项 1。 它将充当环境变量,即使它不是真正的同一件事。

有关环境变量的更多信息: https://en.wikipedia.org/wiki/Environment_variable

【讨论】:

    【解决方案3】:

    静态变量不需要通过对象访问。事实上,这是对代码的浪费。 考虑一下:

    public class MyStatic {
         public static int i = 0;
    }
    

    你可以像这样直接访问静态变量:

    private MyStatic myStatic = null;
    myStatic.i++;
    

    这是因为,JVM 甚至不关心对象的静态属性。

    【讨论】:

      【解决方案4】:

      由于静态变量是类变量,它们可以被任何对象操作,除非您将静态变量声明为私有,否则您必须通过公共静态方法访问它。然后,您的第一种方法是正确的,第二种方法getInteger() 不起作用。 http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

      我建议您阅读有关单例模式设计的内容。

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 2016-05-27
        • 1970-01-01
        相关资源
        最近更新 更多