我正在编写一个通讯软件,该软件将与我的大学控制部门的实验室流程进行交流。进程通过串行端口进行通信,并且会有相当多的位检查/操作。我编写了如下的帮助器类:
public class Channel {
public enum Kind {DIGITAL_IN, DIGITAL_OUT, ANALOG_IN, ANALOG_OUT, COUNTER_IN};
private int resolution;
private int number;
private Kind kind;
public byte[] bits;
public Channel(Kind kind, int resolution, int number) throws Exception {
if (resolution % 8 != 0) {
throw new Exception("Resolution must be divisible by 8");
}
this.kind = kind;
this.resolution = resolution;
this.number = number;
this.bits = new byte[resolution/8];
}
public int getResolution() {
return resolution;
}
public int getNumber() {
return number;
}
public Kind getKind() {
return kind;
}
}
我现在的问题是,在这种情况下,将我的byte []声明为public是否被认为是不好的做法?
在我的LabProcessProtocol类中,我将访问这些 channel 位,并根据我从串行端口上的过程中获取的信息来更改它们。
我有一种预感Java是关于私有(private)化并使用getter和setter的,但我不确定。在这种情况下,似乎太令人费解了。
提前致谢。
最佳答案
好吧,没有绝对禁止公共(public)场所的禁令。如果您认为这是最好的解决方案,请不要感到羞耻,那就去做吧。
就是说,停下来思考一下您想要完成的事情。将所有内容设为私有(private)本身并不是目的,而是要建立不变量,使代码更易于理解和使用。
因此,考虑一下您想对byte[]
进行的操作-别人想对它执行哪些操作?考虑使用用于这些操作的方法,与将现场公开展示相比,这将更易于理解和清洁。另外,请考虑您不希望执行的操作(这将是建立不变式的部分)。例如,直接字段访问将允许用另一个不同长度的byte[]
替换byte[]
-您可能想避免这种情况。
或者,此ojit_code发生了太多事情,因此值得拥有自己的(包装)类吗?这一切都取决于它的使用方式。
最后,从一个简单的公共(public)领域开始没有问题。一旦找到更合适的解决方案,您以后就可以随时对其进行重构。
注意:“您以后可以随时重构”不适用于属于公共API的类(即您正在编写供其他外部项目使用的库)。公共(public)API的设计(通常称为“API设计”)比“内部”代码的设计困难得多,这只是一个示例。这可能不适用于这种情况,我只是想指出一点。