Если вы не хотите простой маршрут String expression = person.name;
(без кавычек вокруг person.name
), вам нужно отражение .
Парсинг произвольного выражения не так прост; если вы хотите вызывать методы с параметрами, вы переходите к пользовательскому языку сценариев. Но просто получить доступ к члену, это не так уж сложно сделать. Но прежде чем я напишу вам какой-либо код, я хотел бы знать, почему вы хотите иметь произвольные выражения, когда простая Java будет здесь.
Редактировать: Этот код может помочь:
public static Object getValue(Object obj, String path)
throws NoSuchFieldException,
IllegalArgumentException,
IllegalAccessException {
Object currentObj = obj;
while (true) {
int indexOfDot = path.indexOf('.');
boolean lastIter = indexOfDot < 0;
String fieldName = lastIter ? path : path.substring(0, indexOfDot);
Field f = currentObj.getClass().getDeclaredField(fieldName);
f.setAccessible(true);
currentObj = f.get(currentObj);
if (lastIter)
return currentObj;
path = path.substring(indexOfDot + 1);
}
}