Mercurial > hg > de.codedo.java.editor
diff src/de/codedo/java/editor/ReflectionUtils.java @ 9:935df68696c0 default tip
Reflection Code in eigene Klasse verschoben.
author | Dirk Olmes <dirk.olmes@codedo.de> |
---|---|
date | Thu, 15 Oct 2020 12:05:06 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/codedo/java/editor/ReflectionUtils.java Thu Oct 15 12:05:06 2020 +0200 @@ -0,0 +1,45 @@ +package de.codedo.java.editor; + +import java.lang.reflect.Field; + +public class ReflectionUtils +{ + public static Field getField(String fieldName, Object object) throws NoSuchFieldException + { + Field field = findField(fieldName, object.getClass()); + field.setAccessible(true); + return field; + } + + @SuppressWarnings("unchecked") + public static <T> T getFieldValue(String fieldName, Object object) throws NoSuchFieldException, IllegalAccessException + { + Field field = getField(fieldName, object); + return (T)field.get(object); + } + + public static void setFieldValue(Object object, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException + { + Field field = getField(fieldName, object); + field.set(object, value); + } + + private static Field findField(String fieldName, Class<?> clazz) throws NoSuchFieldException + { + try + { + return clazz.getDeclaredField(fieldName); + } + catch (NoSuchFieldException ex) + { + // OK, this class does not declare the field. Continue searching the superclass below. + } + + Class<?> superClass = clazz.getSuperclass(); + if (superClass == null) + { + throw new IllegalStateException("Field " + fieldName + " could not be found in object's type hierarchy."); + } + return findField(fieldName, superClass); + } +}