Я думаю, что вам нужно что-то вроде этого:
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
class VCARD4 {
Resource resource_a = new FileSystemResource("/dev/null");
Resource resource_b = new FileSystemResource("/dev/null");
Class<?> class_a = Object.class;
public Resource getResource_a() {
return resource_a;
}
public Resource getResource_b() {
return resource_b;
}
public Class<?> getClass_a() {
return class_a;
}
}
class Scratch {
public static void main(String[] args) {
VCARD4 vcard4 = new VCARD4();
Object fieldValue = getPredicate(vcard4, "resource_a");
System.out.println("Field value: " + fieldValue);
System.out.println("Field class name: " + fieldValue.getClass().getName());
System.out.println("Field superclass name: " + fieldValue.getClass().getGenericSuperclass().getTypeName());
}
private static Object getPredicate(VCARD4 object, String fieldName) {
AtomicReference<Object> targetField = new AtomicReference<>();
Arrays.stream(PropertyUtils.getPropertyDescriptors(VCARD4.class))
.filter(property -> property.getReadMethod().getName().equalsIgnoreCase("get" + fieldName))
.findFirst()
.ifPresent(foundField -> {
Method method = foundField.getReadMethod();
method.setAccessible(true);
targetField.set(ReflectionUtils.invokeMethod(method, object));
});
return targetField.get();
}
}
Это даст вам в основном значение поля, указанного в классе VCARD4. Надеюсь, это поможет.