Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向对象设计:静态字段_Java_Oop_Static - Fatal编程技术网

Java 面向对象设计:静态字段

Java 面向对象设计:静态字段,java,oop,static,Java,Oop,Static,目前我声明了所有静态字段,如下所示: public static final int EXAMPLE_OF_STATIC_FIELD = 0; 假设我有一个基类,其字段表示类内可能出现的所有错误: public class Base { public static final int ERROR_1 = 0; public static final int ERROR_2 = 1; public static final int ERROR_3 = 2; } 如果

目前我声明了所有静态字段,如下所示:

public static final int EXAMPLE_OF_STATIC_FIELD = 0;
假设我有一个基类,其字段表示类内可能出现的所有错误:

public class Base {

    public static final int ERROR_1 = 0;
    public static final int ERROR_2 = 1;
    public static final int ERROR_3 = 2;

}
如果我扩展了这个基类,并且希望向该类添加更多的
错误类型
,我将执行以下操作:

public class OffSpring extends Base {

        public static final int NEW_ERROR_1 = 3;

    }
为了声明新的
错误类型
,我需要从基类中知道
错误类型
的值,在我看来,基类不太方便,因为我可能会意外地在
基类
的子类中声明一个
错误类型
,其值与
基类
中的
错误类型
相同。例如:

public static final int NEW_ERROR_1 = 0;
这和

public static final int ERROR_1 = 0;
这将与

我曾想过可能使用
枚举类
,但结果证明您无法扩展它。

另一个选择是对所有静态字段使用字符串值类型而不是int值类型,但这不是一个非常有效的解决方案


如何向一个类的子类添加更多字段,而不使它们与超类冲突?

为什么不将错误类型存储在映射中,以便检查是否声明了错误类型,因为这是您想要执行的操作


出现
映射错误\u类型
。当您继续添加更多时,可以检查基类并避免冲突。

我看不出您的问题,因为
私有静态final
不是继承属性。 您将无法访问子代。错误1它不存在。 因此,如果您想使用error,您可以选择使用enum并以正确的方式使用它们。 如果您确实更喜欢整数,那是因为您希望使用类似错误组合的hack,因此无法使用值
3

我怎么称呼错误组合? 假设脚本由于两个错误而失败,错误1和错误2 如果错误_1是1,错误_2是2,如果你说代码3有错误,你说你有错误_1,错误_2,因为1是二进制编码的01,2是10。3是两者的结合:11

如果希望所有自定义错误都具有唯一标识,请使用GUID生成器,例如

public class GUIDGenerator{
    private int id = 1;
    public int getId(){
          return id++; 
    }
}

我怀疑你是否真的想这样做。如果这些常量对于它们的声明类是私有的,那么它们重用相同的值又有什么关系呢?如果存在不同错误不使用相同值很重要的上下文,那么这强烈表明它们实际上不应该是私有的

如果你真的想这样做,你可以这样做:

public class Base {
    private static final int ERROR_1 = 0;
    private static final int ERROR_2 = 1;
    private static final int ERROR_3 = 2;
    protected static final int LAST_ERROR = ERROR_3;
}

public class OffSpring extends Base {
    private static final int NEW_ERROR_1 = Base.LAST_ERROR + 1;
}

如果你想拥有多个
Base
的子类,每个子类都定义自己的错误代码,那么你就有麻烦了。

如果你直接定义常量,那么总是有可能出错。使用guid怎么样?(obsolite)虽然这回答了问题,但请记住artragis所说的不能访问基类的私有字段。嗯。。。如果有人将新值插入到
Base
类中,该怎么办?在这种情况下,所有偏移的常量将增加
1
。如果这些常量在某些DB表中用作特殊状态值呢?谢谢,这似乎是允许的。对不起,这些字段应该是公共的。@Andremoniy:是的,对。这似乎很危险,但我从这个问题推断,这是我想要的行为。我喜欢这个想法。但是,如果您有一个扩展“后代”类的类,您会怎么做?