在JAVA中,反射是一个很重要的方法。通过反射获得一个实例,如下:
而其中的Person类,如下:
通过测试,
发现获得的实例对象为空。
Debug调试后发现,false获得的class是class java.lang.Boolean,85获得的class是class java.lang.Integer。
原来false和85作为基本类型获得的class是它们的包装类,这样就只能把构造函数中的boolean改为Boolean,int改为Integer,测试果然通过。
这样看来,在构造函数中用包装类代替基本类型,是不是会另程序更稳定呢?
- @SuppressWarnings("unchecked")
- public Object newInstance(String className,Object[] args){
- try{
- Class myClass = Class.forName(className);
- Class[] argsClass = new Class[args.length];
- for(int i=0;i<args.length;i++){
- argsClass[i] = args[i].getClass();
- }
- Constructor con = myClass.getConstructor(argsClass);
- return con.newInstance(args);
- }catch (Exception e) {
- return null;
- }
- }
- package com.company.code;
- public class Person {
- private String name;
- public String age;
- private boolean sex;
- private String school;
- private int grade;
- public static String level = "Master";
- public Person(String name){
- this.name = name;
- }
- public Person(String name,String age){
- this.name = name;
- this.age = age;
- }
- public Person(String name,String age,boolean sex){
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
- public Person(String name,String age,boolean sex,String school){
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.school = school;
- }
- public Person(String name,String age,boolean sex,String school,int grade){
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.school = school;
- this.grade = grade;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public boolean isSex() {
- return sex;
- }
- public void setSex(boolean sex) {
- this.sex = sex;
- }
- public String getSchool() {
- return school;
- }
- public void setSchool(String school) {
- this.school = school;
- }
- @Override
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- if(name!=null&&name.length()>0)
- buffer.append("My name is " + name + ".");
- if(age!=null&&age.length()>0)
- buffer.append("I'm " + age + " years old.");
- buffer.append("I'm a " + (sex?"boy.":"girl."));
- if(school!=null&&school.length()>0)
- buffer.append("I'm study in " + school + ".");
- if(grade>0)
- buffer.append("I've got a grade of " + grade + " in the exam this time.");
- return buffer.toString();
- }
- public static void eat(){
- System.out.println("I'm eating.");
- }
- public int getGrade() {
- return grade;
- }
- public void setGrade(int grade) {
- this.grade = grade;
- }
- }
- Person pp = (Person) this.reflectInto.newInstance("com.company.code.Person", new Object[]{"gexing","20",false,"CUG",85});
- System.out.println(pp.toString());
发现获得的实例对象为空。
Debug调试后发现,false获得的class是class java.lang.Boolean,85获得的class是class java.lang.Integer。
原来false和85作为基本类型获得的class是它们的包装类,这样就只能把构造函数中的boolean改为Boolean,int改为Integer,测试果然通过。
这样看来,在构造函数中用包装类代替基本类型,是不是会另程序更稳定呢?
版权声明:本文为applerao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。