0

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

  1. 包私有访问器

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

    String color = instanceOfClass.color;
    

在我看来:

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

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

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

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

4

4 回答 4

2

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

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

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

于 2017-06-20T18:48:09.377 回答
0

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

于 2017-06-20T18:52:53.650 回答
0

即使有更多代码,拥有访问器/修改器通常也很方便:

  • 如果您稍后在访问/设置变量时引入一些逻辑,您可以只在一个地方执行此操作,而无需影响使用该变量的所有类 - 您可以轻松添加额外的日志记录、延迟加载、安全性、验证等功能。 ..

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

  • 您可以稍后引入返回对象的生命周期管理 - 例如。返回 pooled/cached/singleton/.. 对象
  • 您可以稍后决定返回代理/装饰对象而不影响调用者

通常,这是一个好主意,因为它为您提供了更大的灵活性,保留了封装性并减少了对象之间的耦合。

于 2017-06-20T19:01:12.607 回答
0

最佳实践是使用 Getter 和 Setter。

这允许以后更容易地添加附加功能(如验证),并阻止您授予从其他类直接访问这些变量的特权。

private String color = InstanceOfClass.color;

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

    else
        return White;

    }

您可以在此处获得有关它们的良好信息: Getter Setter:使用或不使用

于 2017-06-20T19:08:07.073 回答