LTH*_*LTH 53 java coding-style
我的教授真的强调通过始终使用访问器和更改器访问私有实例变量来防止隐私泄露; 但是,我是否必须使用类中的类的getter/setter?
例如,如果我有以下类:
public class Person
{
private String name;
private int age;
}
Run Code Online (Sandbox Code Playgroud)
我想为它编写一个toString()方法.我可以写一下:
public String toString()
{
return name + " " + age;
}
Run Code Online (Sandbox Code Playgroud)
或者我需要做这样的事情:
public String toString()
{
return this.getName() + " " + this.getAge();
}
Run Code Online (Sandbox Code Playgroud)
cor*_*iKa 37
你可以做任何一个.但是,您的教授可能会喜欢使用这些方法而不是直接访问.这就是原因.
假设你有一个这样的类:
class SomeClass {
private int someValue;
private String someString;
public SomeClass(int someValue, String someString) {
this.someValue = someValue;
this.someString = someString;
}
public int someValue() {
return this.someValue;
}
public String someString() {
return this.someString;
}
public String toString() {
return someValue + ": " + someString;
}
}
Run Code Online (Sandbox Code Playgroud)
这很简单,对吧?那么,如果我们突然想要改变我们如何计算的实现someValue
,并将其基于someString
:
public int someValue() {
int value = 0;
for(int i = 0; i < someString.length; i++) {
if(someString.charAt(i) == ' ') value++;
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
现在,您还必须更改someValue
使用变量的每个位置.
因此,如果您希望从长远来看使代码更易于维护,请使用方法调用.这样,当您对自己进行代码更改(并相信我,它会一直更改)时,您只需要在一个位置而不是两个位置进行更改.
是的,您可能希望someString
在最后一个方法中使用方法调用而不是直接访问:-)
Nat*_*hes 19
当我设计一个类时,我试图明确区分内部(实现细节)和外部(暴露给世界的接口).getter和setter提供了一个方便的位置,可以在存储在对象实例成员中的表单与外部世界看到它们的表单之间转换值.在内部使用getter和setter会破坏它,因为它们会被内部和外部使用.
如果您发现自己想要隐藏同一类的另一部分类的一部分,请考虑将要隐藏的部分分解为自己的类.
wax*_*ing 16
由于多种原因,这通常不是一个好主意:
......但与往常一样,也有例外.有些setter可能有你想要执行的副作用(例如设置第二个值),那么使用setter可能会更好.此外,如果您将类设计为继承,如果您希望子类能够更改行为,则最好通过访问器.
一般来说,没有.如果你的getter返回的字段不是字段的值,那么你应该使用该方法,但在极少数情况下,你的方法应该有一个更具描述性的名称.举个不好的例子,如果你有:
public void setName(String name)
{
_name = name;
}
Run Code Online (Sandbox Code Playgroud)
并且你的getter返回了别的东西,比如
public String getName()
{
return _name.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)
那么是的,你应该使用吸气剂.不过,为getter设置更具描述性的名称会更好:
public String getNameAsUppercase()
{
return _name.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用访问器和更改器,但它遵循一个混乱的标准.
它会使你的代码变得混乱,并使任何试图阅读它的人感到困惑,认为它可能不是你班级的一部分.
基本上,只需直接从类内部访问变量,间接访问其他任何变量.
不,你没有.您可以从类中访问任何变量,private,public或protected.
以下是一些可以帮助您的表: