gpt4 book ai didi

java - 在这种情况下,拥有公共(public) Java 类成员会是不好的做法吗?

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:25 28 4
gpt4 key购买 nike

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

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[] 做什么——其他人想对它执行什么操作?考虑为这些操作提供方法,这比将字段公开为公共(public)更容易理解和更清晰。此外,请考虑您不想允许执行哪些操作(这将是建立不变量的部分)。例如,直接字段访问将允许将 byte[] 替换为另一个不同长度的 - 您可能希望阻止这种情况。

或者也许这个 byte[] 发生了很多事情以至于它应该有一个(包装)它自己的类?这完全取决于它的使用方式。

最后,从一个简单的公共(public)字段开始是没有问题的。找到更合适的解决方案后,您随时可以重构它。

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

关于java - 在这种情况下,拥有公共(public) Java 类成员会是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13213284/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com