50,523
社区成员
发帖
与我相关
我的任务
分享
package test.reflect;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class BeanUtil {
public static Map<String, Object> getBeanValue(Object obj, Class<?> clazz, String[] getFields) throws Exception{
if(getFields == null || getFields.length <= 0) return null;
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = clazz.getDeclaredFields();
if(fields != null && fields.length > 0){
for(String getField : getFields){
for(Field field : fields){
if(field.getName().equals(getField)){
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
clazz);
Method method = pd.getReadMethod();
Object object = method.invoke(obj, null);
if(object != null){
map.put(getField, object);
}
}
}
}
}
return map;
}
public static void main(String[] args) {
User user = new User();
user.setsName("test");
user.setPassword("123456");
user.setOnline(false);
user.setAddTime(new Date());
try {
//Map<String, Object> map = BeanUtil.getBeanValue(user, User.class, new String[]{"password", "addTime"});
Map<String, Object> map = BeanUtil.getBeanValue(user, User.class, new String[]{"sName", "password", "isOnline", "addTime"});
if(map != null) System.out.println(map.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
private String sName;
private boolean isOnline;
private String password;
private Date addTime;
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public boolean isOnline() {
return isOnline;
}
public void setOnline(boolean isOnline) {
this.isOnline = isOnline;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
}
java.beans.IntrospectionException: Method not found: isSName
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:106)
at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
at test.reflect.BeanUtil.getBeanValue(BeanUtil.java:20)
at test.reflect.BeanUtil.main(BeanUtil.java:43)
package test;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class test5 {
public static Map<String, Object> getBeanValue(Object obj, Class<?> clazz, String[] getFields) throws Exception{
if(getFields == null || getFields.length <= 0) return null;
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = clazz.getDeclaredFields();
if(fields != null && fields.length > 0){
for(String getField : getFields){
for(Field field : fields){
if(field.getName().equals(getField)){
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
clazz);
Method method = pd.getReadMethod();
Object object = method.invoke(obj, null);
if(object != null){
map.put(getField, object);
}
}
}
}
}
return map;
}
public static void main(String[] args) {
User user = new User();
user.setSName("test");
user.setPassword("123456");
user.setIsOnline(false);
user.setAddTime(new Date());
try {
//Map<String, Object> map = BeanUtil.getBeanValue(user, User.class, new String[]{"password", "addTime"});
Map<String, Object> map = test5.getBeanValue(user, User.class, new String[]{"sName", "password", "isOnline", "addTime"});
if(map != null) System.out.println(map.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
private String sName;
private boolean isOnline;
private String password;
private Date addTime;
public String getSName() {
return sName;
}
public void setSName(String sName) {
this.sName = sName;
}
public boolean getIsOnline() {
return isOnline;
}
public void setIsOnline(boolean isOnline) {
this.isOnline = isOnline;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
}