★12.タイプ情報

2269 ワード

Class

  • クラスごとにClassオブジェクトがあります.
  • Classオブジェクトを取得する方法は、次のとおりです.
  • .class
  • .getClass()
  • Class.forName(" ")

  • Classの方法は次のとおりです.
  • getName():クラス名を返します.
  • getSimpleName():クラス名を返します.
  • getCanonicalName():クラス名を返します.
  • isInterface():インタフェースかどうかを判断します.
  • getInterfaces():クラスのすべてのインタフェースのClassオブジェクトを返します.
  • isInstance(obj):objクラスオブジェクトかどうかを判断するパラメータを受け入れます.
  • isAssignableFrom(cls):Classタイプのパラメータを受け入れ、clsで値を割り当てることができるかどうかを確認します.
  • getSuperclass():ベースクラスのClassオブジェクトを返します.
  • newInstance():Class対応オブジェクトを作成するが、このオブジェクトのタイプはObject(Class を選択すると、Aタイプのオブジェクトが返されます)がデフォルトのコンストラクタでなければなりません。
  • などのClassを特定しない限り)である.
  • getMethods():このClassオブジェクトが記録したクラスのすべての共通メソッドを取得し、Methodオブジェクト配列を返します.
  • getConstructors():このClassオブジェクトレコードのクラスのすべてのコンストラクタを取得し、Constructorオブジェクト配列を返します.
  • cast():モデルチェンジ.

  • 下向きタイプ変換の問い合わせ操作:if(X instanceof Dog)は、問い合わせXがDogタイプであるか否かを表す.

  • Method

  • Method:Classオブジェクトで取得できるメソッドオブジェクト.

  • Constructor

  • Constructor:コンストラクタオブジェクト、Classオブジェクトで取得できます.

  • ダイナミックエージェント

    class Proxyer implements InvocationHandler {
        private Object obj;
    
        Proxyer(Object obj) {
            this.obj = obj;
        }
    
        //  InvocationHandler , : , , 
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            //  
            return method.invoke(obj, args);
        }
    }
    
    interface I {
        void doSomething();
    }
    
    class A implements I {
        public void doSomething() {
            System.out.println("doSomething");
        }
    }
    
    class SimpleDynamicProxy {
        public static void main(String[] args) {
            //  , Class , 
            I proxy = (I) Proxy.newProxyInstance(
                    I.class.getClassLoader(),
                    new Class[]{I.class},
                    new Proxyer(new A()));
            proxy.doSomething();
        }
    }