Java 有类似于 C # 属性的东西吗?

C # 属性(我的意思是 get 和 set 方法)是一个非常有用的特性。Java 也有类似于 C # 属性的东西吗?我的意思是我们如何在 Java 中实现下面的 C # 代码:

public string Name
{
get
{
return name;
}


set
{
name = value;
}
}
76344 次浏览

No, Java does not have the equivalence. It only has accessor and mutator methods, fancy names for getter and setter methods. For example:

public class User {
private String name;


public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
}

You can just declare a private variable, and write the methods by hand. However, if you are using Eclipse, you can click on a variable, select "Source" and "Generate getters and setters." This is about as convenient as C# properties.

You could have a look at Project Lombok as it tries to take the pain out of writing boiler plate Java code. It allows you to either use @Getter and @Setter annotations, which will provide getBlah() and setBlah() methods:

public class GetterSetterExample {
@Getter @Setter private int age = 10;
}

Or you can just use @Data and it will automatically implement your hashCode(), equals(), toString() and getter methods, along with setters on non-final fields:

@Data public class DataExample {
private String name;
}

Problems I have found with the project, however, are that it's all a bit voodoo, which can be off-putting, and that you have to install an Eclipse (or what ever) plugin to get auto compilation to work.

There has been a proposal to add C#-like support for properties (and events) to Java, but it looks like this is rejected for the next version of Java (Java 7).

See:

Properties are not only convenient in terms of writing getters and setters encapsulated in a unit , but also they provide a good syntax at the point of call.

Window.Title =  "New"; //which looks natural

while with getters and setters it is usually

Window.setTitle("New");