java反射机制问题
我直接贴代码了,不懂的话,可以问我,希望可以帮到你
import java.lang.reflect.Field;
public class People {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setValue(String propertyName, Object value){
// 生成调用的方法名
String methodName = “set” + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
try {
// 通过反射得到 这个属性字段
Field field = this.getClass().getDeclaredField(propertyName);
// 给该字段赋值
this.getClass().getMethod(methodName, new Class[]{field.getType()}).invoke(this, value);
} catch (Exception e) {
e.printStackTrace();
}
}
public Object getValue(String propertyName){
// 生成调用的方法名
String methodName = “get” + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
Object value = null;
try {
value = this.getClass().getMethod(methodName, new Class[]{}).invoke(this);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* @param args
*/
public static void main(String[] args) {
People p = new People();
p.setValue(“name”, “ryan”);
p.setValue(“age”, 21);
System.out.println(p.getValue(“name”));
System.out.println(p.getValue(“age”));
}
}
java 如何反射 如何遍历 entity 中的 get 值 并 set 值
try {
Class entityClass=Entity.class;
for(Integer i=1;i=10;i++){
//entity.setQuestion1(DictionnarCacheBean.getDictionnaryName(Constants.VISIT_INFO__MOBILE_QUESTION, entity.getQuestion1()));
Method getMethod = entityClass.getDeclaredMethod(“getQuestion”+i);
//TODO getQuestion1 返回的对象类型进行强制转换
Integer param0=(Integer) getMethod.invoke(entity);
//TODO setQuestion1 的参数对象类型为 T ,要替换
Method setMethod = entityClass.getDeclaredMethod(“setQuestion”+i,T.class);
T param1=DictionnarCacheBean.getDictionnaryName(Constants.VISIT_INFO__MOBILE_QUESTION, param0);
setMethod.invoke(entity,param1 );
}
} catch (Exception e) {
e.printStackTrace();
}
java中的反射,invoke方法详解
就是调用类中的方法,最简单的用法是可以把方法参数化,invoke(class, method)比如你Test类里有一系列名字相似的方法setValue1、setValue2等等。可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue
如:public class MyTest{ public static void main(String[] args) { String [] names ={“tom”,”tim”,”allen”,”alice”};
Class? clazz = Test.class; try Method method = clazz.getMethod(“sayHi”, String.class);for(String name:names)method.invoke(clazz.newInstance(),name);} catch (NoSuchMethodException e) e.printStackTrace(); } catch (IllegalAccessExcepti e.printStackTrace( } catch (IllegalArgumentException {e.printStackTrace();} catch (InvocationTargetException e)e.printStackTrace(); } catch (InstantiationException e {e.printStackTrace( }class Test{public void sayHi(String name){ System.out.println(“Hi “+name); }
java反射中method类中的invoke方法是做什么的,他有什么作用?
首先Method类代表一个方法,所以invoke(调用)就是调用Method类代表的方法。它可以让你实现动态调用,例如你可以动态的传人参数。下面是一个简单的例子。
public class MethodTest
{
public static void main(String[] args)
{
String [] names ={“tom”,”tim”,”allen”,”alice”};
Class? clazz = Test.class;
try
{
Method method = clazz.getMethod(“sayHi”, String.class);
for(String name:names)
method.invoke(clazz.newInstance(),name);
} catch (NoSuchMethodException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (IllegalArgumentException e)
{
e.printStackTrace();
} catch (InvocationTargetException e)
{
e.printStackTrace();
} catch (InstantiationException e)
{
e.printStackTrace();
}
}
}
class Test
{
public void sayHi(String name)
{
System.out.println(“Hi “+name);
}
}
java中反射的三种方法是?
第一种:通过forName()方法;
第二种:类.class;
第三种:对象.getClass()。
举例如下:
package
test;
public class Demo{
public static void
main(){
Class? c1 = null;
Class? c2 =
null;
Class? c3 =
null;
//三种反射用实例化方式
try{
//最常用的一种形式
c1 =
Class.forName(“test.X”);
}catch(ClassNotFoundException
e){
e.printStackTrace();
}
//通过Object类中的方法实例化
c2
= new X().getClass();
//通过类.class实例化
c3 =
X.class;
System.out.println(“类名:” + c1.getName());
//得到类名
System.out.println(“类名:” + c2.getName());
//得到类名
System.out.println(“类名:” + c3.getName());
//得到类名
}
}
Java反射机制获取set()方法 并且为set()方法传值
Class.getDeclaredMethod() 是获取这个类中所有的方法,返回的是Method[]如果有参数,第1个是方法名称,第2个是该方法的所有参数数组,这样返回的是Method这个对象Method.invoke() 传入调用方法的类,另一个是调用这个方法所需要的参数,如果该方法没有参数,可以不填写,在JDK1,4之前,第2个参数是传入一个数组的,但是在jdk1.5之后,可以不传数组,多个参数用逗号隔开 不知道你听明白没