概述
一、Field类代表一个属性的元数据信息。
二、获得Field
1、Field[] fs=c.getFields();
//获得公有属性(只能是公有的)/*/可以是父类的公有的属性
2、Field[] fs2=c.getDeclaredFields();
//获得所有属性(全部类型的修饰符属性均可获得)
3、Field fs3=c.getField(String FieldName);
//获得指定名字的公有属性(只能是公有的)
4、Field fs4=c.getDeclaredField(String FieldName);
//获得指定名字的属性(全部类型的修饰符的属性中指定名字)
例子:
public static void reflect(Object obj) throws NoSuchFieldException, SecurityException {
Class<?> c= obj.getClass();
System.out.println("它的名字是:"+c.getName());
//获得公有属性
Field[] fs=c.getFields();
for(Field ff:fs) {
System.out.println("t它的属性:"+ff.getName());
}
System.out.println("----------------------");
//获得所有属性
Field[] fs2=c.getDeclaredFields();
for(Field ff:fs2) {
System.out.println("t它的属性:"+ff.getName());
}
System.out.println("----------------------");
//获得指定属性
Field fs3=c.getField("empid");
System.out.println("t它的属性:"+fs3);
//获得指定名字的所有属性
System.out.println("----------------------");
Field fs4=c.getDeclaredField("empsarlly");
System.out.println("t它的属性:"+fs4.getName());
}
三、Field类的方法
1、String getName();获得属性名
2、Class getType();获得属性类型
3、获得访问修饰符
(1)int getModifiers() ;通过一个数字来表示多个修饰符的组合。
例子:
Field[] fs2=c.getDeclaredFields();
for(Field ff:fs2) {
System.out.println("t它的属性:"+ff.getName());
System.out.println("tt"+ff.getModifiers());
}
(2)总结:public: 00001
private: 00010
protected: 00100
4、Modifier代表修饰符
提供一些用于处理修饰符的静态方法。
(1) Modifier.isFinal(ff.getModifiers())返回boolean类型
判断该修饰符中是否包含final
(2) Modifier.toString(ff.getModifiers())
对数字进行解码,打印出其中包含的各种修饰符
5、getType()和getGenericType()的区别
(1)首先是返回的类型不一样,一个是Class对象一个是Type的接口。
(2)如果属性是一个泛型。从getType()只能得到这个属性的接口类型,但从getGenericType()还能得到这个泛型的参数类型。
Field实例:
// 插入操作
public static void save(Object obj) {
Class<?> c = obj.getClass();
StringBuffer sql = new StringBuffer("insert into " + c.getSimpleName() + "(");
StringBuffer sql_v = new StringBuffer("values(");
Field[] fi = c.getDeclaredFields();
for (int i = 0; i < fi.length; i++) {
if (i != fi.length - 1) {
sql.append(fi[i].getName() + ",");
sql_v.append("?,");
} else {
sql.append(fi[i].getName() + ")");
sql_v.append("?)");
}
}
sql.append(sql_v);
System.out.println(sql);
Connection conn = CommonDao.getConnection();
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql.toString());
for (int i = 0; i < fi.length; i++) {
fi[i].setAccessible(true);
try {
ps.setObject(i + 1, fi[i].get(obj));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ps.execute();
System.out.println("执行成功!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close(ps);
close(conn);
}
}
最后
以上就是直率野狼为你收集整理的Field及其用法的全部内容,希望文章能够帮你解决Field及其用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复