Field及其用法

一、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("\t\t"+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);
}
}












  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值