Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

does java have something similar to C# properties? [duplicate]

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 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.


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");

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:

  • Why will there be no native properties in Java 7?
  • Java Properties Without Getters and Setters