9090public abstract class ObservableListBase <E > extends AbstractList <E > implements ObservableList <E > {
9191
9292 private ListListenerHelper <E > listenerHelper ;
93- private final ListChangeBuilder <E > changeBuilder = new ListChangeBuilder <>( this ) ;
93+ private ListChangeBuilder <E > changeBuilder ;
9494
9595 /**
9696 * Creates a default {@code ObservableListBase}.
@@ -105,7 +105,7 @@ public ObservableListBase() {
105105 * @param pos the position in the list where the updated element resides.
106106 */
107107 protected final void nextUpdate (int pos ) {
108- changeBuilder .nextUpdate (pos );
108+ getListChangeBuilder () .nextUpdate (pos );
109109 }
110110
111111 /**
@@ -117,7 +117,7 @@ protected final void nextUpdate(int pos) {
117117 * @param old the old value at the {@code idx} position.
118118 */
119119 protected final void nextSet (int idx , E old ) {
120- changeBuilder .nextSet (idx , old );
120+ getListChangeBuilder () .nextSet (idx , old );
121121 }
122122
123123 /**
@@ -130,7 +130,7 @@ protected final void nextSet(int idx, E old) {
130130 * @param removed the list of items that were removed
131131 */
132132 protected final void nextReplace (int from , int to , List <? extends E > removed ) {
133- changeBuilder .nextReplace (from , to , removed );
133+ getListChangeBuilder () .nextReplace (from , to , removed );
134134 }
135135
136136 /**
@@ -141,7 +141,7 @@ protected final void nextReplace(int from, int to, List<? extends E> removed) {
141141 * @param removed the list of items that were removed
142142 */
143143 protected final void nextRemove (int idx , List <? extends E > removed ) {
144- changeBuilder .nextRemove (idx , removed );
144+ getListChangeBuilder () .nextRemove (idx , removed );
145145 }
146146
147147 /**
@@ -152,7 +152,7 @@ protected final void nextRemove(int idx, List<? extends E> removed) {
152152 * @param removed the item that was removed
153153 */
154154 protected final void nextRemove (int idx , E removed ) {
155- changeBuilder .nextRemove (idx , removed );
155+ getListChangeBuilder () .nextRemove (idx , removed );
156156 }
157157
158158 /**
@@ -168,7 +168,7 @@ protected final void nextRemove(int idx, E removed) {
168168 * contain the indexes of the list. Therefore, such permutation would not contain indexes of range {@code (0, from)}
169169 */
170170 protected final void nextPermutation (int from , int to , int [] perm ) {
171- changeBuilder .nextPermutation (from , to , perm );
171+ getListChangeBuilder () .nextPermutation (from , to , perm );
172172 }
173173
174174 /**
@@ -181,7 +181,7 @@ protected final void nextPermutation(int from, int to, int[] perm) {
181181 * @param to marks the end (exclusive) of the range that was added
182182 */
183183 protected final void nextAdd (int from , int to ) {
184- changeBuilder .nextAdd (from , to );
184+ getListChangeBuilder () .nextAdd (from , to );
185185 }
186186
187187 /**
@@ -194,7 +194,7 @@ protected final void nextAdd(int from, int to) {
194194 * @see #endChange()
195195 */
196196 protected final void beginChange () {
197- changeBuilder .beginChange ();
197+ getListChangeBuilder () .beginChange ();
198198 }
199199
200200 /**
@@ -207,7 +207,15 @@ protected final void beginChange() {
207207 * @see #beginChange()
208208 */
209209 protected final void endChange () {
210- changeBuilder .endChange ();
210+ getListChangeBuilder ().endChange ();
211+ }
212+
213+ private ListChangeBuilder <E > getListChangeBuilder () {
214+ if (changeBuilder == null ) {
215+ changeBuilder = new ListChangeBuilder <>(this );
216+ }
217+
218+ return changeBuilder ;
211219 }
212220
213221 @ Override
0 commit comments