You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Niels Basjes (JIRA)" <ji...@apache.org> on 2014/11/27 16:36:13 UTC
[jira] [Created] (AVRO-1614) Always getting a value...
Niels Basjes created AVRO-1614:
----------------------------------
Summary: Always getting a value...
Key: AVRO-1614
URL: https://issues.apache.org/jira/browse/AVRO-1614
Project: Avro
Issue Type: New Feature
Components: java
Reporter: Niels Basjes
Sometimes the Avro structure becomes deeply nested.
If in such a scenario you want to be able to set a specific value deep in this tree you want to do this:
public void setSomething(String value) {
myStruct
.getFoo()
.getBar()
.getOne()
.getOther()
.setSomething(value);
}
The 'problem' I ran into is that any of the 4 get methods can return a null value so the code I have to write is really huge.
For every step in this method I have to build null checks and create the underlying instance if it is null.
I already started writing helper methods to do this for parts of my tree.
To solve this in a way that makes this code readable I came up with the following which I want to propose to you guys (before I start working on a patch).
My idea is to generate a new 'get' method in addition to the existing normal get method for the regular instance of the class.
So in addition to the
public Foo getFoo() {
return foo;
}
I propose to generate something like this as well in the cases where this is a type of structure that you may want to traverse as shown in the example.
public Foo getAlwaysFoo() {
if (foo == null) {
setFoo(Foo.newBuilder().build());
}
return foo;
}
This way the automatically created instance immediately has all the defaults I have defined.
Assuming this naming my code will be readable because it will look like this:
public void setSomething(String value) {
myStruct
.getAlwaysFoo()
.getAlwaysBar()
.getAlwaysOne()
.getAlwaysOther()
.setSomething(value);
}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)