What does an example schema look like in this case? Shouldn't the extant builders give you this behavior if you've made the default for the optional fields non-null?
-- Sean On Nov 26, 2014 11:34 AM, "Niels Basjes" <[email protected]> wrote: > Oops, > That should be > public Foo getFoo() > and > public Foo getAlwaysFoo() > ofcourse > > On Wed, Nov 26, 2014 at 6:28 PM, Niels Basjes <[email protected]> wrote: > > > Hi, > > > > I have a Java project where I'm using Avro as the serialization > technology. > > I have a deep nested structure and many fields are optional. > > > > Because of the 'random' nature of my application I want to be able to > > simply 'set' a value in that tree easily. > > > > So I want to have a setter in my class that looks like this (Assume > > myStruct is an instance of the 'root' class generated by Avro): > > > > 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 void getFoo() { > > return foo; > > } > > > > I propose to generate something like this as well > > > > public void 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); > > } > > > > I can create this same effect in my own project code. > > But having this automatically generated by the Avro engine would make > life > > a lot easier. > > > > Is this an idea you guys would consider to have in the main (Java) > > generated code base? > > If so, is the 'getAlways' prefix sensible? > > > > -- > > Best regards > > > > Niels Basjes > > > > > > -- > Best regards / Met vriendelijke groeten, > > Niels Basjes >
