我正在使用反射来读取类的属性及其值。有字符串,布尔类型和类属性。如何获取类类型的值。反射 - 读取类的属性而不是字符串或int
User.java
private String firstName;
private String lastName;
private SupportLangauge flang;
private SupportLangauge mlang;
SupportLanguage.java
private String languageCode;
private Boolean flang;
private Boolean mlang;
我能救法兰面的数据,使用反射mlang,但无法读取值。当我阅读时,对象正在返回。见下面的示例。
结果:
"flang": "[email protected]
[\r\n languageCode=EN_US\r\n]",
"mlang": "[email protected]
[\r\n languageCode=EN_US\r\n]",
我下面的代码保存的语言类型。
SavingUser.java
for (User user : CollectionsUtilService.nullGuard(userList)) {
PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(
user.getClass()).getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if (fieldValueMap.containsKey(propertyDescriptor.getName())) {
if (propertyDescriptor.getPropertyType().getName().
equalsIgnoreCase("com.sample.entity.user.SupportLanguage")) {
String langString = fieldValueMap.
get(propertyDescriptor.getName());
SupportLanguage s = new SupportLanguage();
s.setLanguageCode(langString);
propertyDescriptor.getWriteMethod().invoke(user, s);
}
}
}
}
我对阅读的价值准则;
RenderingUser.java
if (propertyDescriptor.getPropertyType().
getName().equalsIgnoreCase
("com.sample.entity.
user.SupportLanguage")) {
Method m = propertyDescriptor.getReadMethod();
SupportLanguage s = new SupportLanguage();
System.out.println("m.invoke(SupportLanguage) "
+ m.invoke(s));
你得到的输出'com.sample.entity.user.SupportLanguage @ 3080037d'因为类'SupportLanguage'不会覆盖'的toString()'方法;请参阅[如何在不获取“SomeType @ 2f92e0f4”的情况下打印我的Java对象?](http://stackoverflow.com/questions/29140402/how-do-i-print-my-java-object-without-getting-sometype2f92e0f4 ) – Jesper