import java.lang.reflect.Field;
创新互联建站是专业的大悟网站建设公司,大悟接单;提供网站设计、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大悟网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
/**
* 简单反射
*
* @author huanghuapeng 2017年3月21日
* @see
* @since 1.0
*/
public class CountLine {
public static void main(String[] args) {
Person person = new Person();
Class? extends Person clazz = person.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Class? type = field.getType();
System.out.println(type);
}
}
}
class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Class? cls=Class.forName(className);//通过类的名称反射类
Object obj=cls.newInstance();//对象实例化
Field field=cls.getField(fieldName);//这个对应的是属性
fieldValue=field.get(obj);//这个就是属性的值
/**
* 根据实例化对象获取对象的全部属性
* @param obj 实例化对象
* @return 全部属性
* @throws Exception
*/
public static String[] getFileNameFromObj(Object obj) throws Exception{
if (obj == null) {
return null;
}
Field[] fields = obj.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i fields.length; i++) {
fieldNames[i] = fields[i].getName();
}
return fieldNames;
}
注意:前提是对象可以实例化。
先获取Method对象
以下仅供参考
package com.kidd.test.zhidao;
import java.lang.reflect.Method;
/**
* Hello world!
*
*/
public class Main {
public static void main(String[] args) {
Method method1 = null;
Method method2 = null;
try {
method1 = Class.forName("com.kidd.test.zhidao.Cat").getMethod("getName", (Class?[]) null);
method2 = Class.forName("com.kidd.test.zhidao.Cat").getMethod("getChilds", (Class?[]) null);
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
if (null != method1) {
System.out.println(method1.getGenericReturnType().getTypeName());
}
if (null != method2) {
System.out.println(method2.getGenericReturnType().getTypeName());
}
}
}
class Cat {
private String name;
private Cat[] childs;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Cat[] getChilds() {
return childs;
}
public void setChilds(Cat[] childs) {
this.childs = childs;
}
}
Java.lang.Class
getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class
对象所表示的类或接口所声明的所有字段。
Java.lang.reflect.Field
getName()
返回此 Field 对象表示的字段的名称。
getGenericType()
返回一个 Type 对象,它表示此 Field 对象所表示字段的声明类型。
以上是jdk里面的一些用法,就是用你想要获取对象的属性得到它的class 然后调用 getDeclaredFields()就可以得到字段数组了。
然后再用下面的方法就可以得到属性名,类型这一些。
很简单,要想实现现复杂的功能就再找一下api 找出相应的方法。