Java Needs Automatic Properties

One of my main grievances with the Java programming language is it’s lack of Automatic Properties. These have existed in C# since .NET 3.0.

Automatic Properties make property-declaration more concise when no additional logic is required in the property accessors. For example, let’s say we want to implement a simple Book abstraction in an application, with four simple properties for arguments sake.

This is how it may look in C#:

public class Book
{
    public string Name { get; set; }

    public string Author { get; set; }

    public string ISBN { get; set; }

    public string Genre { get; set; }
}

Nice and simple, and written in about 1 minute when coupled with Visual Studio’s intellisense etc.

Now, lets take a look at a class offering the same basic functionality in Java:

public class Book
{
    public String Name;
    public String Author;
    public String ISBN;
    public String Genre;
   
    public void setName(String name)
    {
        Name = name;
    }
   
    public String getName()
    {
        return Name;
    }
   
    public void setAuthor(String author)
    {
        Author = author;
    }
   
    public String getAuthor()
    {
        return Author;
    }
   
    public void setISBN(String isbn)
    {
        ISBN = isbn;
    }
   
    public String getISBN()
    {
        return ISBN;
    }
   
    public void setGenre(String genre)
    {
        Genre = genre;
    }
   
    public String getGenre()
    {
        return Genre;
    }
}

Just on a lines of code basis, it’s easy to see that C# wins overall. I understand that the designers of Java may not want to add this functionality to the language due to potentially breaking millions of current Java applications – but I’m sure it could be added in such a way that new applications could use it without breaking legacy applications.

Hell, a third party library, Project Lombok, already provides support for using Automatic Properties in Java, so it’s definitely possible.

I find this limitation really frustrating when working with Java.