最近不知道怎么了,好多以前没遇到的知识都来拦路,项目也不顺利,惹了组长大人大怒。比如说今天就遇到了不常用的反射...
喂喂喂,你一定会说反射不大多被用在了框架上吗,而且是被封装好了的。
是呀!以前也是拿来用就好了。可是今天遇到了奇葩的事情,框架构造器竟然无法运行了(当时真想砸电脑)。擦,你一定会说重安装就好了呗!是个思路。可是好多之前的和未完成的release branches的config都要爆掉,受不鸟,受不鸟。最最主要的是今天的工作又要~~~,我擦!
没办法,强整喽!
挺有意思的是这次要reflex的对象被重写了构造;呵,我觉得自己真的不适合继续干下去了;妹的,根本没处理过反射带参的好吗!!!,于是请教组内大佬;
(受某些影响,所以只放Demo)
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* @author: windxndj
* @time: 2019年1月4日
*/
public class Employee {
String name;
int salary;
int saladd;
/**
* String name;字符串:姓名 int salary;整型薪资 int saladd; 整型餐补
*/
//Employee(){}
Employee(String name, int salary, int saladd) {
this.name = name;
this.salary = salary;
this.saladd = saladd;
}
void showSalary() {
System.out.println("姓名:" + name + ",总薪资:" + (salary + saladd));
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
String className = "cn.it.qianyjc.Employee";
//妹的,报错呀!我就在这无限报错;
//思考了一下,想起当年只知道创建无参对象,没有继续深入理解反射...啊。。。抓狂~~~
//Employee emp = (Employee)(Class.forName(className).newInstance());
//这里自己拆开的,看一下具体哪里报错;
Class clazz;
//class字节码的获取(⊙﹏⊙b汗!之前明明是在下面报错,没看出对象创建上的问题,以为是最常见的字节码对象获取错了;
//clazz = Employee.class;
//以为这的问题,那类名的反射试了一下。。。。现在一想,当时脑袋绝对瓦特了;)
clazz = Class.forName(className);
//获取类Employee构造方法的参数列表
//new Employee(String,int,int)
//知道构造方法和创建对象有关,但忘了反射的对象TM也有大关;
//以前的做的反射绝对的隐藏了getDeclaredConstructor;这里感谢王哥!!!
Constructor cons = clazz.getDeclaredConstructor(String.class, int.class, int.class);
Object instance;
//以前直接用该方法用的是指定类中默认的 空参数构造函数 完成的初始化;
//吃一堑长一智,第一次知道.newInstance参数列表也可以这么玩,真TM;
instance = cons.newInstance("zs",1,2);
Employee emp=(Employee)instance;
emp.showSalary();
}
}
好吧!至此,问题解决;明天星期天;希望不要影响到放假的好心情;