我最近加入了一家新公司,我正在尝试习惯他们的编码风格指南。我没有问题改变我的编码风格,但有一点,我不确定它们是否正确。
对于我的第一个任务,我必须扩展一个现有的抽象类来开发特定的功能。因此,我需要访问在这个抽象超类中声明的许多属性。为此,我建议更改这些属性的可见性并将其声明为受保护。他的回答让我感到惊讶:
“从不!这绝对是针对OOP而你会产生模糊且难以维护的代码!你需要做的是在超类中创建一个getter并从子类中使用它来访问这些属性”。< / p>
好吧,我一直在抽象超类中使用受保护的属性并直接从子类中访问它们,我一直认为它没有任何问题。即使我会说,一直调用getter来访问超类中的属性比使用它的名称要慢...
你怎么看?它是正常的/标准的编码风格,在超类中声明属性并直接访问它们,还是你更喜欢为这些属性创建getters。
以我的方式sumarize:
public abstract class A {
protected String variableA="a";
public abstract methodToImplement();
}
public MyClass B extends A {
public methodToImplement() {
System.out.println(variableA.length());
}
}
他们的方式:
abstract class A {
protected String variableA="a";
public String getVariableA() {
return variableA;
}
public abstract methodToImplement();
}
MyClass B extends A {
public methodToImplement() {
System.out.println(getVariableA().length());
}
}
感谢。
答案 0 :(得分:1)
因此,正如其他线程已经指出的那样,确实建议使用getter和setter。原因是,如果您计划更改该值的表示形式(例如StringBuilder而不是String),则必须更改代码。 getter / setter允许您以您向getter / setter发送所需数据的方式进行编程,并将它们存储在适当的字段中(例如,将其附加到StringBuilder)。所以是的,即使它不是你的编码风格,它也有很多优势。但是,当你使用getter和setter时,将变量声明为protected似乎很奇怪。
我个人试图在他们有点矫枉过正时避免吸毒者/闯入者。对我来说,它们对价值变量来说太过分了。但是对于参考变量,它们是一个好主意。
但是,我认为这里没有对错..