/*
*传入对象t
*这里的T为泛型
*/
public static <T> void getName(T t) {
//获得该对象的属性
Field[] filed = t.getClass().getDeclaredFields();
for (int i = 0; i < filed.length; i++) {
//打印属性名称
System.out.println(filed[i].getName());
}
}
全部代码
util.java
package util;
import java.lang.reflect.Field;
public class Util<T> {
public static <T> void getName(T t) {
// 获得该对象的属性
Field[] filed = t.getClass().getDeclaredFields();
for (int i = 0; i < filed.length; i++) {
System.out.println(filed[i].getName());
}
}
public static void main(String[] args) {
new Util<>().getName(new Netschool());
}
}
Netschool.java
package util;
import java.util.Date;
/**
* 网校信息表
*
* @author xiachenxiang
*
*/
public class Netschool {
/**
* 网校id
*/
private String school_id;
/**
* 网校名称
*/
private String name;
/**
* 网校简介
*/
private String details;
/**
* 网校创建人(校长)
*/
private String principal;
/**
* 网校创建日期
*/
private Date creation_date;
/**
* 联系电话
*/
private String phone;
/**
* 网站地址
*/
private String web_addr;
/**
* 微信公众号
*/
private String wechat;
/**
* QQ号
*/
private String qq;
/**
* 创建者
*/
private String creater;
/**
* 创建时间
*/
private Date creation_time;
/**
* 修改人
*/
private String updater;
/**
* 修改时间
*/
private Date update_time;
/**
* 缩略图
*/
private String pic_img;
public String getSchool_id() {
return school_id;
}
public void setSchool_id(String school_id) {
this.school_id = school_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public String getPrincipal() {
return principal;
}
public void setPrincipal(String principal) {
this.principal = principal;
}
public Date getCreation_date() {
return creation_date;
}
public void setCreation_date(Date creation_date) {
this.creation_date = creation_date;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getWeb_addr() {
return web_addr;
}
public void setWeb_addr(String web_addr) {
this.web_addr = web_addr;
}
public String getWechat() {
return wechat;
}
public void setWechat(String wechat) {
this.wechat = wechat;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getCreater() {
return creater;
}
public void setCreater(String creater) {
this.creater = creater;
}
public Date getCreation_time() {
return creation_time;
}
public void setCreation_time(Date creation_time) {
this.creation_time = creation_time;
}
public String getUpdater() {
return updater;
}
public void setUpdater(String updater) {
this.updater = updater;
}
public Date getUpdate_time() {
return update_time;
}
public void setUpdate_time(Date update_time) {
this.update_time = update_time;
}
public String getPic_img() {
return pic_img;
}
public void setPic_img(String pic_img) {
this.pic_img = pic_img;
}
}
运行结果
school_id
name
details
principal
creation_date
phone
web_addr
wechat
qq
creater
creation_time
updater
update_time
pic_img
java反射获得属性并赋值网上已经有很多方案了,我自己讲得也不会比人家的好了,我这里主要写一下java反射获得属性的简单应用吧。
这两天写代码的时候需要从map<String,Object>
里面提取数据赋值给制定对象,不但枯燥,而且费时,然后我就写了一些工具类来代替这个
方案一
public static <T> T getObject(T t, Map<String, Object> map) {
try {
Field[] filed = t.getClass().getDeclaredFields();
for (int i = 0; i < filed.length; i++) {
//取消 Java 语言访问检查,简单的说就是可以访问private属性了
filed[i].setAccessible(true);
//判断类型并填充
if (filed[i].getType().equals(String.class)) {
filed[i].set(t, map.get(filed[i].getName()));
} else if (filed[i].getType().equals(Date.class)) {
filed[i].set(t, (Date) map.get(filed[i].getName()));
} else if (filed[i].getType().equals(Float.class)) {
filed[i].set(t, ((BigDecimal) map.get(filed[i].getName())).floatValue());
} else if (filed[i].getType().equals(Integer.class)) {
filed[i].set(t, (Integer) map.get(filed[i].getName()));
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//返回填充后的对象
return t;
}
这个方案的好处是直接获得对象,坏处是的加入这个工具类,而且根别人的代码有明细不同。
方案二
public static <T> void getStatementSet(T t) {
try {
//获得属性名
Field[] filed = t.getClass().getDeclaredFields();
for (int i = 0; i < filed.length; i++) {
//获得类名如 Netschool
String s = t.getClass().getName().substring(t.getClass().getName().lastIndexOf('.') + 1);
//1.将类名首字母小写 如netschool
//2.将当前属性名首字母大写 如School_id
//3.拼装并输出netschool.setSchool_id
//if语句根据不同的类型打印map.get语句
System.out.print(s.substring(0, 1).toLowerCase() + s.substring(1) + ".set"
+ filed[i].getName().substring(0, 1).toUpperCase() + filed[i].getName().substring(1));
if (filed[i].getType().equals(String.class)) {
System.out.println("(map.get(\"" + filed[i].getName() + "\")+\"\");");
} else if (filed[i].getType().equals(Date.class)) {
System.out.println("((Date)map.get(\"" + filed[i].getName() + "\"));");
} else if (filed[i].getType().equals(Float.class)) {
System.out.println("(((BigDecimal)map.get(\"" + filed[i].getName() + "\")).floatValue());");
} else if (filed[i].getType().equals(Integer.class)) {
System.out.println("((Integer)map.get(\"" + filed[i].getName() + "\"));");
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
方案二的话缺点是看起来麻烦,但是优点是不用加入工具类并且代码和别人的相同
= = over