C#属性(指get和set方法)是非常有用的特性。Java是否有类似于C#属性的功能?也就是说,我们如何在java中实现以下类似C#代码的功能:
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
C#属性(指get和set方法)是非常有用的特性。Java是否有类似于C#属性的功能?也就是说,我们如何在java中实现以下类似C#代码的功能:
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
不,Java没有等价物。它只有访问器和变异器方法,也就是getter和setter方法的花式命名。例如:
public class User {
private String name;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
}
你可以看一下Project Lombok,因为它试图简化编写样板Java代码的痛苦。它允许您使用@Getter
和@Setter
注释,这将提供getBlah()
和setBlah()
方法:
public class GetterSetterExample {
@Getter @Setter private int age = 10;
}
或者你可以直接使用 @Data
,它会自动实现你的hashCode()
、equals()
、toString()
和getter方法以及非final字段的setter方法:
@Data public class DataExample {
private String name;
}
然而,我发现该项目存在的问题是它有些神秘,可能会使人望而却步,并且你必须安装Eclipse(或其他)插件才能使自动编译工作。
GetterSetterExample.getAge
允许使用=设置属性的C# setters将在此处失败
GetterSetterExample.setAge = 10
无法使用Lombok语法实现 - Dataminion属性不仅便于编写封装在单元中的getter
和setter
,而且它们在调用时提供了良好的语法。
Window.Title = "New"; //which looks natural
与getters
和setters
一起使用时,通常是这样的
Window.setTitle("New");