From fb6be45d2bcb97e0e0288ba81a602679c7bedc46 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Tue, 28 Jul 2009 17:38:26 +0200 Subject: Added website feature documentation for @ToString and @EqualsAndHashCode, and modified the docs for @Data to refer to the docs of these new annotations. The build script for the website has been updated to clean out the website build dir first, so files that used to exist but have now been tossed are no longer there. There's also a special website-no-videos target which builds a website deployable without the videos. This makes the upload a lot faster if the videos haven't changed. --- website/features/Data.html | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'website/features/Data.html') diff --git a/website/features/Data.html b/website/features/Data.html index b6f0cc85..ee81405a 100644 --- a/website/features/Data.html +++ b/website/features/Data.html @@ -11,31 +11,34 @@

@Data

- +

Overview

- Any class definition may be annotated with @Data to let lombok generate all the boilerplate that is associated with simple POJOs - (Plain Old Java Objects) and beans: getters for all fields, setters for all non-final fields, a useful toString, and implementations - of hashCode and equals which consider any two objects of this type with the same values for each field as equal. A - constructor is also generated containing 1 parameter for each final field, in the order the fields are defined. This constructor simply assigns - each parameter to the appropriate field. -

-

- To override the access level of any getter/setter for any field, annotate the field with a @Setter or @Getter annotation - with the appropriate AccessLevel value. See the example below. For more information on how the getters/setters are generated, - see the documentation for @Getter and @Setter. + @Data is a convenient shortcut annotation that bundles the features of @ToString, + @EqualsAndHashCode and @Getter / @Setter + together: In other words, @Data generates all the boilerplate that is normally associated with simple POJOs + (Plain Old Java Objects) and beans: getters for all fields, setters for all non-final fields, and appropriate toString, equals + and hashCode implementations that involve the fields of the class. In addition, @Data generates a constructor that + initialized all final fields. +

+ @Data is like having implicit @ToString and @EqualsAndHashCode annotations on the class. + However, the parameters of @ToString and @EqualsAndHashCode (such as callSuper, includeFieldNames and + exclude) cannot be set with @Data. If you need to set non-default values for any of these parameters, just add those annotations + explicitly; @Data is smart enough to defer to those annotations. +

+ All generated getters and setters will be public. To override the access level, annotate the field with an explicit @Setter and/or + @Getter annotation.

All fields marked as transient will not be considered for hashCode and equals. All static fields will be skipped entirely (not considered for any of the generated methods, and no setter/getter will be made for them). - The generated getter/setter method will be public unless you explicitly specify an AccessLevel, as shown in the example below. - Legal access levels are PUBLIC, PROTECTED, PACKAGE, and PRIVATE.

- If any method that would normally be generated exists in name that method will not be generated, and no warning or error is emitted. For example, - if you already have a method with signature void hashCode(int a, int b, int c), no int hashCode() method will be generated, - even though technically int hashCode() is an entirely different method. The same rule applies to the constructor, toString, - hashCode, and all getters and setters. + If the class already contains a method with the same name as any method that would normally be generated, that method is not generated, and no warning or + error is emitted. For example, if you already have a method with signature void hashCode(int a, int b, int c), no int hashCode() + method will be generated, even though technically int hashCode() is an entirely different method. The same rule applies to the constructor, + toString, equals, and all getters and setters.

@Data can handle generics parameters for fields just fine. In order to reduce the boilerplate when constructing objects for classes with generics, you can use the staticConstructor parameter to generate a private constructor, as well as a static method that returns a new @@ -61,9 +64,6 @@ Arrays are 'deep' compared/printed/hashCoded, which means that arrays that contain themselves will result in StackOverflowErrors. However, this behaviour is no different from e.g. ArrayList.

- You may safely presume that the hashCode implementation used will not change between versions of lombok, however this guarantee is not set in stone; - if there's a significant performance improvement to be gained from using an alternate hash algorithm, that will be substituted in a future version. -

For a general idea of how lombok generated the equals, hashCode, and toString methods, check the example after.

For the purposes of equality, 2 NaN (not a number) values for floats and doubles are considered equal, eventhough 'NaN == NaN' would @@ -73,7 +73,7 @@

-- cgit