访问包私有变量的好习惯是什么?

What is good practice to accessing package private variables?

从同一个包中的其他 类 访问我的包私有变量有什么好的做法?

  1. 包-私有访问器

    String getColor() {
        return color;
    }
    
  2. 只是从对象访问作为字段。

    String color = instanceOfClass.color;
    

我认为:

  1. 用于访问包私有字段的包私有方法。很多不必要的代码,但在我看来提供了很多字段的清晰度(以及正确命名的访问器方法)

  2. 我们不需要包中包私有变量的访问器和修改器,所以也许我不应该创建它们?

哪种做法更好,符合编程约定?

编辑:感谢您的快速回答! :)

与封装相比,访问器和修改器与抽象的关系更大。您希望能够控制 如何 设置该字段,而不是让任何人在其中放置一些随机值。例如,您可能有一个永远不应为 null 的值,因此..

void setField(Field field) {
    if(field != null) {
        this.field = field;
    }
}

然后您将 field 变量声明为 private。如果你允许任何人向其中写入任何内容,那么这个逻辑将需要移动到设置它的任何地方,这将导致代码重复。

仅在必要时使用访问器。除此之外,最好只允许在该包内部访问包私有变量。例如,如果变量是计算中使用的某个值,请使用来自另一个包的 public 方法调用在包 中 执行您需要的操作,然后传递它到您的其他包裹。

拥有 accessors/mutators 通常很方便,即使它需要更多代码:

  • 如果你稍后在 accessing/setting 变量时引入一些逻辑,你可以只在一个地方做,而不需要影响所有使用变量的 类 - 你可以轻松添加功能,如附加日志记录、延迟加载、安全性、验证...

  • 您可以稍后更改字段的基础表示(例如,在某些情况下 return 子类型)

  • 您稍后可以引入 returned 对象的生命周期管理 - 例如。 Return pooled/cached/singleton/.. 对象
  • 您稍后可以决定 return Proxy/decorated 对象而不影响调用者

总的来说,这是一个好主意,因为它可以为您提供更大的灵活性、保留封装并减少对​​象之间的耦合。

最佳做法是使用 Getters 和 Setters。

这允许以后更容易地添加附加功能(如验证),并防止您授予从其他 class.

直接访问这些变量的特权
private String color = InstanceOfClass.color;

String getColor(){
    if(background == White)
        return Black;

    else
        return White;

    }

您可以在这里获得有关它们的详细信息: Getter Setter: To Use or Not to Use