Skip to content

Commit 4b5d085

Browse files
committed
see 01/17 log
1 parent 2835135 commit 4b5d085

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

utilcode/src/main/java/com/blankj/utilcode/util/ReflectUtils.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private ReflectUtils newInstance(final Constructor<?> constructor, final Object.
198198
*/
199199
public ReflectUtils field(final String name) {
200200
try {
201-
Field field = getAccessibleField(name);
201+
Field field = getField(name);
202202
return new ReflectUtils(field.getType(), field.get(object));
203203
} catch (IllegalAccessException e) {
204204
throw new ReflectException(e);
@@ -214,20 +214,29 @@ public ReflectUtils field(final String name) {
214214
*/
215215
public ReflectUtils field(String name, Object value) {
216216
try {
217-
Field field = getAccessibleField(name);
218-
if ((field.getModifiers() & Modifier.FINAL) == Modifier.FINAL) {
219-
Field modifiersField = Field.class.getDeclaredField("modifiers");
220-
modifiersField.setAccessible(true);
221-
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
222-
}
217+
Field field = getField(name);
223218
field.set(object, unwrap(value));
224219
return this;
225220
} catch (Exception e) {
226221
throw new ReflectException(e);
227222
}
228223
}
229224

230-
private Field getAccessibleField(String name) throws ReflectException {
225+
private Field getField(String name) throws IllegalAccessException {
226+
Field field = getAccessibleField(name);
227+
if ((field.getModifiers() & Modifier.FINAL) == Modifier.FINAL) {
228+
try {
229+
Field modifiersField = Field.class.getDeclaredField("modifiers");
230+
modifiersField.setAccessible(true);
231+
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
232+
} catch (NoSuchFieldException ignore) {
233+
// runs in android will happen
234+
}
235+
}
236+
return field;
237+
}
238+
239+
private Field getAccessibleField(String name) {
231240
Class<?> type = type();
232241
try {
233242
return accessible(type.getField(name));
@@ -238,8 +247,7 @@ private Field getAccessibleField(String name) throws ReflectException {
238247
} catch (NoSuchFieldException ignore) {
239248
}
240249
type = type.getSuperclass();
241-
}
242-
while (type != null);
250+
} while (type != null);
243251
throw new ReflectException(e);
244252
}
245253
}

utilcode/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,9 @@ public void fieldFinal() throws Exception {
383383

384384
@Test
385385
public void fieldPrivateStaticFinal() throws Exception {
386+
assertEquals(1, ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I1").get());
387+
assertEquals(1, ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I2").get());
388+
386389
ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I1", 2);
387390
ReflectUtils.reflect(TestPrivateStaticFinal.class).field("I2", 2);
388391

utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
* </pre>
1010
*/
1111
public class TestPrivateStaticFinal {
12-
private static final int I1;
12+
private static final int I1 = new Integer(1);
1313
private static final Integer I2 = new Integer(1);
14-
15-
static {
16-
I1 = new Integer(1);
17-
}
1814
}

0 commit comments

Comments
 (0)