反射应用举例2

public class Student{
private long id;
private String name;
private int age;

get/set

}

public void test(Object o,String msg){
//…
}

有一个类Student如上,我们需要实现一个方法test如上.
要求:
1.参数o表示要操作的对象
2.参数msg是一个固定格式的字符串
例如:
Object o = new Student();
String msg = “id=5”;
t.test(o,msg);
然后test方法中需要调用到o对象中的和id属性对应的setId方法并且把5当做值传递进去
3.异此类推,完成”id=5” “name=tom” “age=20”等形式的传值调用test方法

——————————————分割线———————————————————-

package com.briup.反射List;

import java.lang.reflect.Method;
public class Student{
private long id;
private String name;
private int age;

public void test(Student o,String msg){
    try {
        Class<? extends Student> c = o.getClass();
        String[] split = msg.split("=");
        String a = split[0];//  id
        //Id
        String cs=""+(char) ((a.substring(0, 1).toCharArray()[0])-32)+a.substring(1);
        String b = split[1];//  5
        if("id".equals(a)){
            Method method = c.getMethod("set"+cs, long.class);
            method.invoke(o, Long.parseLong(b));
        }else if("age".equals(a)){
            Method method = c.getMethod("set"+cs,int.class);
            method.invoke(o, Integer.parseInt(b));
        }else if("name".equals(a)){
            Method method = c.getMethod("set"+cs, String.class);
            method.invoke(o, b);
        }else{

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public long getId() {
    return id;
}
public void setId(long id) {
    System.out.println(id+"----setId");
    this.id = id;
}
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 Student() {}

@Override
public String toString() {
    return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

——————————————分割线———————————————————-

package com.briup.反射List;

public class T {

public static void main(String[] args) {
    try {
        Student o = new Student();
        String msg1 = "id=5";
        String msg2 = "name=tom";
        String msg3 = "age=20";
        o.test(o,msg1);
        o.test(o,msg2);
        o.test(o,msg3);
        System.out.println(o);
    } catch (Exception e) {
    }

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值