反射メカニズムによるクラスのコンストラクタへのアクセス

4086 ワード

3つのアクセス方法があります.
  • ClassクラスオブジェクトからnewInstance()メソッドを呼び出すことで、クラスの無パラメトリックコンストラクタにアクセスできます.
  • ClassクラスオブジェクトによってgetConstructor()メソッドを呼び出すことによって、あるクラスの無パラメトリックコンストラクタを得ることができる.
  • Classクラスオブジェクト呼び出しgetConstructor(クラスパラメータ)メソッドにより、あるクラスのパラメトリックコンストラクタを得ることができる(パラメトリックコンストラクタが呼び出されたときにメソッド署名に基づいて構造メソッドを区別し、入力されたパラメータの順序が異なると異なる呼び出し結果がある).例:反射メカニズムによってコンストラクタにアクセスします.
  • package com.cx.reflection;
    
    import java.lang.reflect.Constructor;
    
    class A {
        private int x;
        private String s;
    
        public A() {
            System.out.println(" ");
        }
    
        public A(int x) {
            this.x = x;
            System.out.println(" (int)");
        }
    
        public A(int x, String s) {
            this.x = x;
            this.s = s;
            System.out.println(" (int, String)");
        }
    
        public A(String s, int x) {
            this.x = x;
            this.s = s;
            System.out.println(" (String, int)");
        }
    
        public String getS() {
            return s;
        }
    
        public void setS(String s) {
            this.s = s;
        }
    
        public int getX() {
            return x;
        }
    
        public void setX(int x) {
            this.x = x;
        }
    }
    
    public class TestClass {
        public static void main(String[] args) throws Exception {
            Class> c = Class.forName("com.cx.reflection.A");
            A a = (A) c.newInstance();
            System.out.println(a);
            Constructor> constructor = c.getConstructor();
            a = (A) constructor.newInstance();
            System.out.println(a);
            constructor = c.getConstructor(int.class);
            a = (A) constructor.newInstance(100);
            System.out.println(a);
            constructor = c.getConstructor(int.class, String.class);
            a = (A) constructor.newInstance(100, "cx");
            System.out.println(a.getX() + ", " + a.getS());
            constructor = c.getConstructor(String.class, int.class);
            a = (A) constructor.newInstance("cx", 100);
            System.out.println(a.getX() + ", " + a.getS());
        }
    }