我只是想在 Java 类上定义一个属性 getter,并被告知 Java 不使用 getter 和 setter,而且实际上没有“属性”。(Java 中的虚拟(派生)属性是什么?)
C# 和 Java“简单”/“值”/“属性”/“属性”类成员之间有什么区别,每种语言的选择有哪些优点/缺点?
以下面 C# 中的属性用法为例:
public class Dude{
public string fName {get; set;} //this is what I mean by property
public string lName {get; set;}
public string fullName
{
get {return this.fName + " " + this.lName;}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Java 中,您没有像在 C# 中那样显式“声明属性”的语法方法。这并不意味着 Java语义上不存在属性。
来自官方文档:
要在 bean 类中定义属性,请提供公共 getter 和 setter 方法。
因此,以您的类为例,它在 Java 中看起来像这样:
public class Dude{
public String fName;
public String lName;
public String getFName() {
return fName;
}
public void setFName(String fName) {
this.fName = fName;
}
public String getLName() {
return lName;
}
public void setLName(String lName) {
this.lName = lName;
}
public String getFullName() {
return this.fName + " " + this.lName;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Java 的反射 API 进行内省并操作PropertyDescriptors,您会注意到它们将读/写操作委托给 getter 和 setter:
BeanInfo info = Introspector.getBeanInfo(MyBean.class);
PropertyDescriptor[] pds = info.getPropertyDescriptors();
pds[0].getReadMethod().invoke(..); // Call to getFName()
pds[0].getWriteMethod().invoke(..); // Call to setFName()
Run Code Online (Sandbox Code Playgroud)
除了从 C# 获得的语法糖之外,我认为 Java 上这种方法的最大问题是代码容易出错。复制/粘贴代码并忘记实际更改操纵变量是非常容易的。使用 C# 糖,您只需声明属性类型、名称和访问器,因此出现人为错误的空间就会减少。
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |