The usage would be for any class that can make use of some of the attributes. @Data is a nice one for pojos and entities, but the constructor ones, Synchronized and others can be used in almost any class. The @Log/@Slf4j ones are very handy.
It happens at compile time and does not generate source file. Yes if you define a getter/setter or any function it would automatically make it uses the coded one and doesn't create the default one from the annotation. -=Brian On Fri, May 25, 2018 at 10:50 AM Stephen Moist <mo...@cloudera.com> wrote: > Would this mainly be on the DB layer? With intellij, theres a shortcut to > auto-gen these fields, does this improve on that? > > At compile time, does it overwrite the src or generate a new file? In the > case of needing additional logic in a set/get method, can I override that? > > > On May 24, 2018, at 11:08 PM, Na Li <lina...@cloudera.com> wrote: > > > > Brian, > > > > That looks quite useful. We can give it a try. > > > > Cheers, > > > > Lina > > > >> On May 24, 2018, at 7:02 PM, Kalyan Kumar Kalvagadda < > kkal...@cloudera.com> wrote: > >> > >> Brian, > >> > >> It will be helpful. I'm in the favor of it. > >> > >> > >> *Thanks,Kalyan Kumar Kalvagadda* | Software Engineer > >> t. (469) 279- <0000000000>5732 > >> cloudera.com <https://www.cloudera.com> > >> > >> [image: Cloudera] <https://www.cloudera.com/> > >> > >> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image: > >> Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: > Cloudera > >> on LinkedIn] <https://www.linkedin.com/company/cloudera> > >> ------------------------------ > >> > >>> On Thu, May 24, 2018 at 2:54 PM, Brian Towles <btow...@cloudera.com> > wrote: > >>> > >>> Howdy all, > >>> > >>> I was wondering what the teams thoughts are on using Lombok? > >>> > >>> https://projectlombok.org/ > >>> > >>> Lombok is a tool that uses annotations at *compile time* to dynamically > >>> generate the boilerplate code for things like getters, setters, basic > >>> constructors, toString, equals, etc... > >>> There are no actual code changes to the source, so its not a > traditional > >>> generator. It uses the internal > >>> To me it has been a very helpful time saver for coding and maintenance > and > >>> it allows for us to avoid missing things. > >>> > >>> A good look at how it works in IntelliJ and Eclipse is here: > >>> https://www.javacodegeeks.com/2016/06/lombok-compile-time- > >>> java-annotation-preprocessor-minimize-code-size.html > >>> > >>> But as a quick example of using this for a very simple class and a > single > >>> @Data annotation takes: > >>> > >>> package org.apache.sentry; > >>> > >>> import lombok.Data; > >>> > >>> @Data > >>> public class SimpleBean { > >>> private final String name; > >>> private int age; > >>> private double score; > >>> private String[] tags; > >>> } > >>> > >>> and turn it effectively into > >>> > >>> package org.apache.sentry; > >>> > >>> public class SimpleBean { > >>> private final String name; > >>> private int age; > >>> private double score; > >>> private String[] tags; > >>> > >>> @java.beans.ConstructorProperties({"name"}) > >>> public SimpleBean(String name) { > >>> this.name = name; > >>> } > >>> > >>> public String getName() { > >>> return this.name; > >>> } > >>> > >>> public int getAge() { > >>> return this.age; > >>> } > >>> > >>> public double getScore() { > >>> return this.score; > >>> } > >>> > >>> public String[] getTags() { > >>> return this.tags; > >>> } > >>> > >>> public void setAge(int age) { > >>> this.age = age; > >>> } > >>> > >>> public void setScore(double score) { > >>> this.score = score; > >>> } > >>> > >>> public void setTags(String[] tags) { > >>> this.tags = tags; > >>> } > >>> > >>> public boolean equals(Object o) { > >>> if (o == this) { > >>> return true; > >>> } > >>> if (!(o instanceof SimpleBean)) { > >>> return false; > >>> } > >>> final SimpleBean other = (SimpleBean) o; > >>> if (!other.canEqual((Object) this)) { > >>> return false; > >>> } > >>> final Object this$name = this.getName(); > >>> final Object other$name = other.getName(); > >>> if (this$name == null ? other$name != null : > >>> !this$name.equals(other$name)) { > >>> return false; > >>> } > >>> if (this.getAge() != other.getAge()) { > >>> return false; > >>> } > >>> if (Double.compare(this.getScore(), other.getScore()) != 0) { > >>> return false; > >>> } > >>> if (!java.util.Arrays.deepEquals(this.getTags(), other.getTags())) { > >>> return false; > >>> } > >>> return true; > >>> } > >>> > >>> public int hashCode() { > >>> final int PRIME = 59; > >>> int result = 1; > >>> final Object $name = this.getName(); > >>> result = result * PRIME + ($name == null ? 43 : $name.hashCode()); > >>> result = result * PRIME + this.getAge(); > >>> final long $score = Double.doubleToLongBits(this.getScore()); > >>> result = result * PRIME + (int) ($score >>> 32 ^ $score); > >>> result = result * PRIME + java.util.Arrays.deepHashCode( > >>> this.getTags()); > >>> return result; > >>> } > >>> > >>> protected boolean canEqual(Object other) { > >>> return other instanceof SimpleBean; > >>> } > >>> > >>> public String toString() { > >>> return "SimpleBean(name=" + this.getName() + ", age=" + > >>> this.getAge() + ", score=" + this > >>> .getScore() + ", tags=" + > >>> java.util.Arrays.deepToString(this.getTags()) + ")"; > >>> } > >>> } > >>> > >>> > >>> There are more helper functions in the library for things like > Builders, > >>> and Synchronized. > >>> > >>> What do you guys think about using this in Sentry? > >>> > >>> -=Brian > >>> > >>> -- > >>> *Brian Towles* | Software Engineer > >>> t. (512) 415- <0000000000>8105 e. btow...@cloudera.com < > j...@cloudera.com> > >>> cloudera.com <http://www.cloudera.com/> > >>> > >>> [image: Cloudera] <http://www.cloudera.com/> > >>> > >>> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image: > >>> Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: > Cloudera > >>> on LinkedIn] <https://www.linkedin.com/company/cloudera> > >>> ------------------------------ > >>> > > -- *Brian Towles* | Software Engineer t. (512) 415- <0000000000>8105 e. btow...@cloudera.com <j...@cloudera.com> cloudera.com <http://www.cloudera.com/> [image: Cloudera] <http://www.cloudera.com/> [image: Cloudera on Twitter] <https://twitter.com/cloudera> [image: Cloudera on Facebook] <https://www.facebook.com/cloudera> [image: Cloudera on LinkedIn] <https://www.linkedin.com/company/cloudera> ------------------------------