![](/img/trans.png)
[英]Use public getters/setters to access private variables in the same class, or access the variables directly
[英]Does it make sense to declare variables as private with getters/setters for class member definitions declared within a public class?
class Foo {
String bar;
// private String bar;
}
public class A {
public void method1() {
Foo foo = new Foo();
// foo.bar; or foo.getBar(); which is preferable
}
}
使用 class 成员定义的 getter/setter 将变量声明为私有是否有意义(例如, bar
应该在Foo
中声明为私有,还是应该只声明为String bar
)? 我宁愿删除它们,因为无论如何都无法在此 class 之外访问它们。 什么会更可取?
如果仅用于数据访问,则没有 getter/setter 应该没问题(一些纯粹主义者可能不同意)。 并且您的 class 应该能够访问内部 class 的私有成员,因此您可以将它们保密。
使用 getter 和设置来访问/改变私有字段成员是标准的 OO 实践。 它允许 class 的内部工作在保持其公共接口的同时进行更改。
如果您通过将 bar 直接作为公共接口的一部分(通过使其公开)来访问/变异bar
,现在看起来可能很好,但是几个月后,当您决定要向bar
添加一些验证时会发生什么? 也许您不希望bar
被设置为null
。 你怎么能做到这一点? 如果您使用 getter 和 setter,您需要做的就是更改您的 setter 以在尝试将bar
设置为null
时抛出异常。 如果你直接改变bar
,你就不能这样做。 更彻底的是,您可能会决定不再需要该bar
!
Getter 和 setter 并不意味着 class 内部存在相同名称和类型的字段成员。 他们只告诉您 class 具有可以访问/变异的属性,并且没有说明 class 在内部执行该操作的方式。 这为您提供了很大的灵活性。
使 Foo 成为内部 class并且没有获取器/设置器:
public class A {
private class Foo {
String bar;
}
public void method1() {
Foo foo = new Foo();
foo.bar = "x";
}
}
这是好的设计,因为 Foo 仅在 A 中可见 - 这并不比直接在 class 中访问私有字段而不是通过 getter 更糟糕。
请先回答:为什么method1
需要了解foo
的bar
? 为什么method1
首先需要知道Foo
甚至还有bar
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.