我正在编写一个通讯软件,该软件将与我的大学控制部门的实验室流程进行交流。进程通过串行端口进行通信,并且会有相当多的位检查/操作。我编写了如下的帮助器类:

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设计”)比“内部”代码的设计困难得多,这只是一个示例。这可能不适用于这种情况,我只是想指出一点。

10-06 13:45