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
}
}
使用类成员定义的getter / setter将变量声明为私有是否有意义(例如,bar
中Foo
应声明为私有,或者应将其声明为String bar
)?我宁愿删除它们,感觉无论如何它们都无法在本课程之外访问。什么会更好?
答案 0 :(得分:1)
如果它仅用于数据访问,那么没有getter / setter应该没问题(一些纯粹主义者可能不同意)。并且您的类应该能够访问内部类的私有成员,以便您可以将它们保密。
答案 1 :(得分:1)
使用getter和设置来访问/改变私有字段成员是标准的OO实践。它允许类的内部工作在保持其公共接口的同时进行更改。
如果您通过将其作为公共界面的一部分直接提供(通过公开)来访问/变异bar
,它现在看起来似乎很好但是几个月后,您决定要发生什么时会发生什么?为bar
添加一些验证?也许您不希望将bar
设置为null
。你怎么能实现这个目标?如果您使用getter和setter,那么您需要做的就是更改setter,以便在尝试将bar
设置为null
时抛出异常。如果你直接改变bar
,你就不能这样做。更严重的是,您可能会认为根本不再需要bar
!
getter和setter并不意味着类的内部存在同名和类型的字段成员。它们只告诉您该类具有可以访问/变异的属性,并且不指示该类在内部执行的方式。这为您提供了很大的灵活性。
答案 2 :(得分:1)
让Foo成为内部类并且没有getter / setter:
public class A {
private class Foo {
String bar;
}
public void method1() {
Foo foo = new Foo();
foo.bar = "x";
}
}
设计是好的,因为Foo只在A中可见 - 它并不比直接在类中访问私有字段而不是通过getter更糟糕。
答案 3 :(得分:0)
请先回答:为什么method1
需要了解foo
的{{1}}?为什么bar
需要知道method1
甚至首先 Foo
?