2009-02-23 60 views
1

我有一个封装类封装了一个需要作为字节数组传输的信息。常量与保护静态只读

通过这种方式,该类将必要的头部(如DATA_LENGTH或MESSAGE_TYPE等字段)封装到相应的字节位置。为此,我想定义常量中的位置和长度,例如:

HEADER_DATA_LENGTH_IX = 0; 
HEADER_DATA_LENGTH_LENGTH = 2; 

这意味着DATA_LENGTH从0开始并占用两个字节。

但到目前为止,我正在努力使它们成为常量或静态只读字段。 Const不能被保护,因此如果使用它们,我将无法派生一个新类并更改这些常量,另一方面,我可能会在派生类中声明新的常量并使用它们。

您的方法是什么?

+0

这是什么技术? 。净? Java的? – 2009-02-23 14:46:52

+0

当我第一次发布答案时,标签不是它的,对不起 – 2009-02-23 23:51:22

回答

4

如果你想改变在派生类中,这些则params的值,你可以让他们readonly并改变它们在派生类的构造函数

我不会让他们无论如何const,因为他们”不...

1
protected static final 

in java!

0

我不会让这些常量,因为它们不是常量。当声明为const的时候,你应该问自己:这个改变可以吗?你的信息长度可能会在一天内改变,所以他们最好是只读的。

+0

他们不能改变,他们可能会改变,但是这个想法是派生一个新的类来处理这些改变,因此,对于班级生活来说, ,将是不变的,只是为了避免“幻数” – 2009-02-23 14:48:53

0

创建具有常量的内部类。派生类可以稍后重写内部类,并根据需要更改常量。

例如基类:

public class Stuff 
{ 
    public class HeaderInformation 
    { 
    public const int HEADER_DATA_LENGTH_IX = 0; 
    public const int HEADER_DATA_LENGTH_LENGTH = 2; 
    } 
} 

然后派生类可以这样做:

public class DerivedStuff : Stuff 
{ 
    public new class HeaderInformation : Stuff.HeaderInformation 
    { 
    public new const int HEADER_DATA_LENGTH_IX = 10; 
    } 
} 

这样一来,你有灵活性。在DerivedStuff中,HeaderInformation类具有基类Stuff.HeaderInformation类中的所有常量,但可以更改它们中的任何一个,或保留它所具有的常量。