@@ -84,35 +84,23 @@ public Any next() {
8484 public abstract ValueType valueType ();
8585
8686 public <T > T bindTo (T obj , Object ... keys ) {
87- Any found = get (keys );
88- if (found == null ) {
89- return null ;
90- }
91- return found .bindTo (obj );
87+ return get (keys ).bindTo (obj );
9288 }
9389
9490 public <T > T bindTo (T obj ) {
9591 return (T ) object ();
9692 }
9793
9894 public <T > T bindTo (TypeLiteral <T > typeLiteral , T obj , Object ... keys ) {
99- Any found = get (keys );
100- if (found == null ) {
101- return null ;
102- }
103- return found .bindTo (typeLiteral , obj );
95+ return get (keys ).bindTo (typeLiteral , obj );
10496 }
10597
10698 public <T > T bindTo (TypeLiteral <T > typeLiteral , T obj ) {
10799 return (T ) object ();
108100 }
109101
110102 public Object object (Object ... keys ) {
111- Any found = get (keys );
112- if (found == null ) {
113- return null ;
114- }
115- return found .object ();
103+ return get (keys ).object ();
116104 }
117105
118106 public abstract Object object ();
@@ -126,23 +114,15 @@ public List<Any> asList() {
126114 }
127115
128116 public <T > T as (Class <T > clazz , Object ... keys ) {
129- Any found = get (keys );
130- if (found == null ) {
131- return null ;
132- }
133- return found .as (clazz );
117+ return get (keys ).as (clazz );
134118 }
135119
136120 public <T > T as (Class <T > clazz ) {
137121 return (T ) object ();
138122 }
139123
140124 public <T > T as (TypeLiteral <T > typeLiteral , Object ... keys ) {
141- Any found = get (keys );
142- if (found == null ) {
143- return null ;
144- }
145- return found .as (typeLiteral );
125+ return get (keys ).as (typeLiteral );
146126 }
147127
148128 public <T > T as (TypeLiteral <T > typeLiteral ) {
@@ -151,7 +131,7 @@ public <T> T as(TypeLiteral<T> typeLiteral) {
151131
152132 public final boolean toBoolean (Object ... keys ) {
153133 Any found = get (keys );
154- if (found == null ) {
134+ if (found . valueType () == ValueType . INVALID ) {
155135 return false ;
156136 }
157137 return found .toBoolean ();
@@ -163,7 +143,7 @@ public boolean toBoolean() {
163143
164144 public final int toInt (Object ... keys ) {
165145 Any found = get (keys );
166- if (found == null ) {
146+ if (found . valueType () == ValueType . INVALID ) {
167147 return 0 ;
168148 }
169149 return found .toInt ();
@@ -175,7 +155,7 @@ public int toInt() {
175155
176156 public final long toLong (Object ... keys ) {
177157 Any found = get (keys );
178- if (found == null ) {
158+ if (found . valueType () == ValueType . INVALID ) {
179159 return 0 ;
180160 }
181161 return found .toLong ();
@@ -187,7 +167,7 @@ public long toLong() {
187167
188168 public final float toFloat (Object ... keys ) {
189169 Any found = get (keys );
190- if (found == null ) {
170+ if (found . valueType () == ValueType . INVALID ) {
191171 return 0 ;
192172 }
193173 return found .toFloat ();
@@ -199,7 +179,7 @@ public float toFloat() {
199179
200180 public final double toDouble (Object ... keys ) {
201181 Any found = get (keys );
202- if (found == null ) {
182+ if (found . valueType () == ValueType . INVALID ) {
203183 return 0 ;
204184 }
205185 return found .toDouble ();
@@ -211,8 +191,8 @@ public double toDouble() {
211191
212192 public final String toString (Object ... keys ) {
213193 Any found = get (keys );
214- if (found == null ) {
215- return null ;
194+ if (found . valueType () == ValueType . INVALID ) {
195+ return "" ;
216196 }
217197 return found .toString ();
218198 }
@@ -234,39 +214,22 @@ public Iterator<Any> iterator() {
234214 public EntryIterator entries () { return EMPTY_ENTRIES_ITERATOR ; }
235215
236216 public Any get (int index ) {
237- return null ;
217+ return new NotFoundAny ( index , object ()) ;
238218 }
239219
240220 public Any get (Object key ) {
241- return null ;
221+ return new NotFoundAny ( key , object ()) ;
242222 }
243223
244224 public final Any get (Object ... keys ) {
245- try {
246- return get (keys , 0 );
247- } catch (IndexOutOfBoundsException e ) {
248- return null ;
249- } catch (ClassCastException e ) {
250- return null ;
251- }
225+ return get (keys , 0 );
252226 }
253227
254228 public Any get (Object [] keys , int idx ) {
255229 if (idx == keys .length ) {
256230 return this ;
257231 }
258- return null ;
259- }
260-
261- public final Any require (Object ... keys ) {
262- return require (keys , 0 );
263- }
264-
265- public Any require (Object [] keys , int idx ) {
266- if (idx == keys .length ) {
267- return this ;
268- }
269- throw reportPathNotFound (keys , idx );
232+ return new NotFoundAny (keys , idx , object ());
270233 }
271234
272235 public Any set (int newVal ) {
0 commit comments