5
5
[ ![ Version] ( https://img.shields.io/badge/version-1.0.2-orange )] ( https://github.com/LEODPEN/BetterBuilder/releases )
6
6
---
7
7
BetterBuilder is a [ Java annotation processor] ( https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html ) used for
8
- automatically generating better builder codes([ builder design pattern] ( https://en.wikipedia.org/wiki/Builder_pattern#Java ) ) with fluent get/set methods ,
8
+ automatically generating ** better** builder codes([ builder design pattern] ( https://en.wikipedia.org/wiki/Builder_pattern#Java ) ),
9
9
which can make coding much more comfortable.
10
10
11
+ ### Why better ?
12
+
13
+ + [ fluent get/set method] ( #fluentSet-switch )
14
+ + [ configurable get/set] ( #field-ignore ) .
15
+ + [ 2 set type provided] ( #set-type )
16
+ + 3 builder patterns provided:
17
+ + [ no builder] ( #nobuilder-switch )
18
+ + classic
19
+ + [ ** type safe** ] ( #type-safe-builder )
20
+
21
+
11
22
## Getting BetterBuilder
12
23
13
24
> BetterBuilder doesn't add any runtime dependencies to your code.
@@ -119,9 +130,9 @@ public class Student {
119
130
120
131
### NoBuilder switch
121
132
122
- Once make {noBuilder = true }, BetterBuilder will not generate builder methods (nor the allArgsConstructor).
133
+ Once make {BUILDER_TYPE = BuilderType.NO_BUILDER }, BetterBuilder will not generate builder methods (nor the allArgsConstructor).
123
134
``` java
124
- @BetterBuilder (noBuilder = true )
135
+ @BetterBuilder (BUILDER_TYPE = BuilderType . NO_BUILDER )
125
136
public class Student {
126
137
...
127
138
}
@@ -147,6 +158,27 @@ public class Student {
147
158
It is for those ** fields that aren't allowed to be changed or accessed after
148
159
initialization** .
149
160
161
+ ### Type-Safe Builder
162
+
163
+ When we use builder pattern to generate our object, some fields are supposed to be
164
+ initialized. But the classic pattern does not guarantee this.
165
+
166
+ BetterBuilder provides a type-safe builder pattern. Once the fields annotated with
167
+ @Required haven't been initialized, the goal object will not be generated[ instead, an IllegalArgumentException will be thrown] .
168
+
169
+ ``` java
170
+ @BetterBuilder (BUILDER_TYPE = BuilderType . TYPE_SAFE , fluentSet = false , fluentGet = true )
171
+ public class TypeSafe {
172
+ @BetterBuilder . Required
173
+ private Integer ID ;
174
+ @BetterBuilder . Required
175
+ private String name;
176
+ private Boolean PID ;
177
+ private Long PID79211 ;
178
+ }
179
+ ```
180
+ you can also see the detail files :
181
+ [ type-safe] ( https://github.com/LEODPEN/BetterBuilder/blob/main/testModule/src/main/java/TypeSafe.java ) and [ type-safe-test] ( https://github.com/LEODPEN/BetterBuilder/blob/main/testModule/src/test/java/TypeSafeTest.java ) .
150
182
151
183
## Todo list
152
184
@@ -158,7 +190,7 @@ initialization**.
158
190
- [x] fluent - get / test
159
191
- [x] ignore get
160
192
- [x] compatible with lombok
161
- - [ ] type-safe builder / @ Required for certain fields
193
+ - [x ] type-safe builder
162
194
163
195
...
164
196
0 commit comments