[prev in list] [next in list] [prev in thread] [next in thread] 

List:       avro-dev
Subject:    [jira] [Created] (AVRO-1614) Always getting a value...
From:       "Niels Basjes (JIRA)" <jira () apache ! org>
Date:       2014-11-27 15:36:13
Message-ID: JIRA.12758248.1417102571000.35315.1417102573045 () Atlassian ! JIRA
[Download RAW message or body]

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)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic