在这种情况下拥有公共Java类成员是不好的做法?

eva*_*ing 5 java private public

我正在编写一个通信软件,它将与我所在的控制部门的实验室流程进行通信.进程通过串口进行通信,并且会有一些比特检查/操作.我编写了一个如下所示的辅助类:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,在这种情况下,将我的byte []声明为public是否会被视为不良做法?在我的LabProcessProtocol类中,我将访问这些通道位并根据我从串行端口上的进程获得的内容进行更改.

我有一种预感,认为Java是私有的,并且使用getter和setter,但我不确定.在这种情况下似乎很复杂.

提前致谢.

sle*_*ske 9

嗯,没有绝对禁止公共领域.如果你认为这是最好的解决方案,那就不要感到羞耻,继续做吧.

也就是说,停下来思考一下你想要完成的事情.让一切都变得私密本身并不是一个目标 - 我们的想法是建立不变量,使代码更易于理解和使用.

那么考虑一下你想做什么byte[]- 其他人想要对它进行哪些操作?考虑使用这些操作的方法,比将公开的字段公开更容易理解和更清晰.另外,请考虑您不希望允许的操作(这将是建立不变量的部分).例如,直接字段访问将允许替换byte[] 不同长度的另一个 - 您可能希望防止这种情况.

或者也许这么多byte[],它应该得到一个自己的(包装)类?这一切都取决于它的使用方式.

最后,从简单的公共字段开始没有问题.一旦找到更合适的解决方案,您可以随后重构它.

注意: "您以后可以随时重构它"不适用于作为公共API一部分的类(即您正在编写一个库以供其他外部项目使用).公共API的设计(通常称为"API设计")比"内部"代码的设计困难得多,这只是一个例子.这可能不适用于这种情况,我只是想指出来.