avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sean Busbey <bus...@cloudera.com>
Subject Re: Always getting a value...
Date Wed, 26 Nov 2014 19:58:14 GMT
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" <Niels@basjes.nl> wrote:

> Oops,
> That should be
>      public Foo getFoo()
> and
>      public Foo getAlwaysFoo()
> ofcourse
>
> On Wed, Nov 26, 2014 at 6:28 PM, Niels Basjes <Niels@basjes.nl> 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
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message