JavaBeans™ Should be Extended to Reduce Bloat
Join the DZone community and get the full member experience.
Join For FreeJavaBeans™ has been around for a long time in the Java world. At some point of time, people realised that the concept of getters and setters was good to provide some abstraction over “object properties”, which should not be accessed directly. A typical “bean” would look like this:
public class MyBean { private int myProperty; public int getMyProperty() { return myProperty; } public void setMyProperty(int myProperty) { this.myProperty = myProperty; } }
In various expression languages and other notations, you could then access “myProperty” using a simple property notation, which is good:
// The below would resolve to myBean.getMyProperty() myBean.myProperty // This could resolve to myBean.setMyProperty(5) myBean.myProperty = 5
Critique on Java properties
Other languages, such as C# even allow to inline such property expressions in regular C# code, in order to call getters and setters. Why not Java?
Getter and Setter naming
Why do I have to use those bloated “get”/”is” and “set” prefixes every time I want to manipulate object properties? Besides, the case of the first letter of the property changes, too. If you want to perform a case-sensitive search on all usage of a property, you will have to write quite a regular expression to do so
Setter returning void
Returning void is one of the biggest reasons Java generates so much bloat at API call sites. Since the early days of Java, method chaining was a wide-spread practice. No one would like to miss StringBuilder’s (or StringBuffer’s) chainable append() methods. They’re very useful. Why doesn’t the Java compiler allow to re-access the property container after calling a setter?
A better Java
In other words, this API:
public interface API { void oneMethod(); void anotherMethod(); void setX(int x); int getX(); }
Should be usable as such:
API api = ... int x = api.oneMethod() // Returning void should in fact "return" api .anotherMethod() // Returning void should in fact "return" api .x; // Getter access, if x is not accessible
Let’s make this a JSR!
Published at DZone with permission of Lukas Eder. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments