java中在反射中怎么调用有参构造器
答案:2 悬赏:70
解决时间 2021-01-16 20:34
- 提问者网友:雨不眠的下
- 2021-01-16 15:20
java中在反射中怎么调用有参构造器
最佳答案
- 二级知识专家网友:狂恋
- 2021-01-16 16:13
这里以用反射调用 public String(StringBuilder builder)这个构造方法为例子说明,代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "hello";
// 1首先获取String类的类类型
Class c = str.getClass();
try {
// 2然后获取构造方法和参数,这里用参数就可以指定调用的是哪个构造方法了
Constructor constructor = c.getConstructor(StringBuilder.class);
String result = (String) constructor.newInstance(new StringBuilder("abcd"));
System.out.println("result: " + result);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "hello";
// 1首先获取String类的类类型
Class c = str.getClass();
try {
// 2然后获取构造方法和参数,这里用参数就可以指定调用的是哪个构造方法了
Constructor constructor = c.getConstructor(StringBuilder.class);
String result = (String) constructor.newInstance(new StringBuilder("abcd"));
System.out.println("result: " + result);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
全部回答
- 1楼网友:孤老序
- 2021-01-16 16:38
Class cls = Class.forName("类名");
Class[] paramTypes = { String.class, String.class, String.class,String.class };//参数
Object[] params = {参数1, 参数2, 参数3, 参数4}; // 方法传入的参数
Constructor con = cls.getConstructor(paramTypes); //根据参数调用构造器
Entity base = (Entity ) con.newInstance(params); //Entity 为自定义类
追问:我还是不懂,能用一个student类说明一下吗?
追答:import java.lang.reflect.Constructor;
public class Student {
public String name; //名字
public Integer age; //年龄
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("Student");
Class[] paramTypes = { String.class, Integer.class };//参数
Constructor con = clazz.getConstructor(paramTypes); //根据参数调用构造器
Object[] params = {"张三",15}; // 方法传入的参数
Student student = (Student) con.newInstance(params); //根据已经传参数进去的构造器创建Student
System.out.println(student.getName()); //打印出 张三
}
}
追问:谢谢
Class[] paramTypes = { String.class, String.class, String.class,String.class };//参数
Object[] params = {参数1, 参数2, 参数3, 参数4}; // 方法传入的参数
Constructor con = cls.getConstructor(paramTypes); //根据参数调用构造器
Entity base = (Entity ) con.newInstance(params); //Entity 为自定义类
追问:我还是不懂,能用一个student类说明一下吗?
追答:import java.lang.reflect.Constructor;
public class Student {
public String name; //名字
public Integer age; //年龄
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName(){
return this.name;
}
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("Student");
Class[] paramTypes = { String.class, Integer.class };//参数
Constructor con = clazz.getConstructor(paramTypes); //根据参数调用构造器
Object[] params = {"张三",15}; // 方法传入的参数
Student student = (Student) con.newInstance(params); //根据已经传参数进去的构造器创建Student
System.out.println(student.getName()); //打印出 张三
}
}
追问:谢谢
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯