提示信息

Java通过反射访问构造方法

空如 已关注

Java通过反射访问构造方法可以使用Class类的以下方法:
1. getConstructor()方法:获取指定参数类型的公共构造方法。
2. getDeclaredConstructor()方法:获取指定参数类型的所有构造方法,包括公共、私有和受保护的构造方法。
3. getConstructors()方法:获取所有公共构造方法。
4. getDeclaredConstructors()方法:获取所有构造方法,包括公共、私有和受保护的构造方法。

通过这些方法获取到构造方法对象后,可以使用Constructor类的以下方法进行操作:
1. newInstance()方法:使用构造方法创建一个新的对象。
2. setAccessible()方法:设置构造方法的可访问性,即使是私有构造方法也可以访问。

例如,假设有一个类Person,通过反射访问其构造方法的示例代码如下:

  1. import java.lang.reflect.Constructor;
  2. public class Main {
  3. public static void main(String[] args) throws Exception {
  4. Class<?> clazz = Person.class;
  5. // 获取指定参数类型的公共构造方法
  6. Constructor<?> publicConstructor = clazz.getConstructor(String.class, int.class);
  7. Person person1 = (Person) publicConstructor.newInstance("Alice", 25);
  8. System.out.println(person1.getName() + " " + person1.getAge());
  9. // 获取所有公共构造方法
  10. Constructor<?>[] publicConstructors = clazz.getConstructors();
  11. for (Constructor<?> constructor : publicConstructors) {
  12. System.out.println(constructor);
  13. }
  14. // 获取指定参数类型的所有构造方法,包括公共、私有和受保护的构造方法
  15. Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(String.class);
  16. declaredConstructor.setAccessible(true);
  17. Person person2 = (Person) declaredConstructor.newInstance("Bob");
  18. System.out.println(person2.getName() + " " + person2.getAge());
  19. // 获取所有构造方法,包括公共、私有和受保护的构造方法
  20. Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
  21. for (Constructor<?> constructor : declaredConstructors) {
  22. System.out.println(constructor);
  23. }
  24. }
  25. }
  26. class Person {
  27. private String name;
  28. private int age;
  29. public Person() {
  30. }
  31. public Person(String name) {
  32. this.name = name;
  33. }
  34. public Person(String name, int age) {
  35. this.name = name;
  36. this.age = age;
  37. }
  38. public String getName() {
  39. return name;
  40. }
  41. public int getAge() {
  42. return age;
  43. }
  44. }

上述代码中,我们通过反射获取了Person类的各种构造方法,并通过构造方法创建了不同的Person对象。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
空如 关注 已关注

最近一次登录:2023-10-09 13:11:00   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图