java - 使用变量/静态变量到 'name' 值以提高可读性

标签 java static final

public class myObject extends someOtherObject(){

    final int MAINBOX_X = 0;
    final int MAINBOX_Y = 1;
    final int BUTTON_X = 2;
    final int BUTTON_Y = 3;
    final int TEXT_X = 4;
    final int TEXT_Y = 5;

    public myObject(int x, int y){

        super();

        //'coordinates' is an array of pairs, x and y for example
        coordinates[MAINBOX_X] = x;
        coordinates[MAINBOX_Y] = y;
        coordinates[BUTTON_X] = coordinates[MAINBOX_X]+10;
        coordinates[BUTTON_Y] = coordinates[MAINBOX_Y]+10;
        coordinates[TEXT_X] = coordinates[MAINBOX_X]+10;
        coordinates[TEXT_Y] = coordinates[MAINBOX_Y]+50;

        //This aids readability because the alternative would be:
        //coordinates[0] = x;  //Where 0 is the index representing the object's x coordinate
        //coordinates[1] = y;  //Where 1 is the index representing the object's y coordinate
        //coordinates[2] = coordinates[0]+10;
        //coordinates[3] = coordinates[1]+10;
        //etc....
        //This could easily get very confusing without using proper/recognisable names!


    }
}

现在如果我创建很多论文对象。假设其中有 400 个。 (注意,这只是一个简单的例子,实际项目中不仅仅只有X和Y值)。

我已经阅读了所有“statics are bad”之类的帖子,我想了解的是当我创建所有这些对象时,内存中会有这些最终 int 的多个副本——这似乎没有必要我的值(value)观始终相同。

但是,如果我将它们声明为静态/类变量,那么所有对象都将共享一个变量副本,因此只会创建一个副本 - 内存效率更高?

单独的静态类

另一种方法是创建一个“值”类并容纳静态数据——只是为了保持整洁。 (尽管说实话,我可以简单地将原始类/对象的引用传递给需要访问这些值的类)。

为此目的使用静态/类变量是否可以接受?如果没有,什么是更好的选择?

最佳答案

假设你有 100 个 MyObject 对象,所有成员都是最终的和静态的。这意味着所有这 100 个对象都具有相同的不可更改的静态变量,因为最终的。所以你不能在其他 99 个对象中更改这些成员。所以你在您的情况下不能同时使用 static 和 final。

只考虑没有 final 的静态成员。这意味着您不需要创建 MyObject 类的实例对象,因为您可以通过类名在任何地方(您想要将这些变量传递到那里的地方)使用这些变量。

如果您希望每个实例对象都有特定的变量,您可以在使用实例对象和非静态和非最终变量后更改这些变量。

我认为在您的情况下使用静态变量很好,因为所有 100 个对象都使用相同的变量和相同的值。因此您不会为所有对象占用额外的内存。实际上您不需要 100 个对象。您只需要一个类及其静态非最终变量

关于java - 使用变量/静态变量到 'name' 值以提高可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290771/

相关文章:

java - 如何使 String 变量的值在分配后不改变?

java - 如何检测是否支持图形界面?

在 IE10 中重新加载另一个框架时,Java Applet 失败/消失

c++ - 类中私有(private)静态方法和私有(private)方法之间的区别

java - 从内部类引用的局部变量必须是 final 或有效的 final

java - android处理程序将变量设置为final

java - spring boot RequestBody 不起作用

java - hibernate/JPA : IllegalArgumentException: Not an entity

java - 在具有可接受/惯用的静态初始值设定项的类中使用空静态方法吗?

java - 单例对象——在静态 block 中或在 getInstance() 中;应该使用哪个