从同一个包中的其他类访问我的包私有变量有什么好的做法?
包私有访问者
String getColor() {
return color;
}
只需从对象访问字段。
String color = instanceOfClass.color;
在我看来:
用于访问package-private字段的Package-private方法。很多不必要的代码,但在我看来提供了许多字段(以及正确命名的访问方法)的清晰度
我们不需要包中的包私有变量的访问器和变换器,所以也许我不应该创建它们?
哪种做法更好,与编程惯例一致?
编辑:谢谢你快速回答! :)答案 0 :(得分:2)
访问器和增变器与抽象有关,而不是封装。您希望能够控制 该字段的设置方式,而不是让任何人在其中放置一些随机值。例如,您可能有一个永远不应为null的值,所以..
void setField(Field field) {
if(field != null) {
this.field = field;
}
}
然后,您会将field
变量声明为private
。如果您允许任何人在其中写入任何内容,则需要将此逻辑移动到设置它的任何位置,这将导致代码重复。
答案 1 :(得分:0)
仅在必要时使用访问者。除此之外,最好只允许在该包内访问包私有变量。例如,如果变量是计算中使用的某个值,则使用来自另一个包的公共方法调用,使用在包中执行所需的操作,然后将其传递给另一个包。
答案 2 :(得分:0)
即使有更多的代码,有访问器/ mutator通常也很方便:
如果您稍后在访问/设置变量时引入了一些逻辑,则可以在一个地方完成,而无需使用变量影响所有类 - 您可以轻松添加功能作为额外的日志记录,延迟加载,安全,验证,......
您可以稍后更改字段的基础表示(例如,在某些情况下返回子类型)
通常,这是一个好主意,因为它可以提供更大的灵活性,保留封装并减少对象之间的耦合。
答案 3 :(得分:0)
最佳做法是使用Getters and Setters。
这允许以后更容易添加其他功能(如验证)并阻止您从其他类直接访问这些变量的特权。
private buildWildcardList(path:string): string[] {
let result: string[] = [];
_.each(this.acceptedFileExtensions, (extension: string) => {
result.push(path + '/**/*' + extension);
});
return result;
}
let wildcardList: string[] = this.buildWildcardList(path);
this.watcher = chokidar.watch(wildcardList, watchOptions);
您可以在此处获得有关他们的良好信息: Getter Setter: To Use or Not to Use