一般的な方法は、反射Java言語が含まれます

パッケージレビューは、
/ * 12は以下のとおりです。43 * / 2019 / 7/21です。
インポートmodel.AnotherClass; インポートmodel.OneClassMore; インポートmodel.SomeClass; インポートjava.lang.reflect.Constructor; インポートをjava.lang.reflect.Fieldなど、 インポートのJava .lang.reflect.InvocationTargetException; インポートjava.lang.reflect.Methodオブジェクト; / ** *このクラスのJava言語は、一般的に反射に使用されるいくつかのメソッドを示します * @author zhangxingshuo * / パブリック クラスAboutReflection { 公共の 静的な 無効メイン(文字列[]引数)がスロー{例外 } / * 获得クラス对象的3种方式* / プライベート 静的クラスgetClazz0(文字クラス名)は<?> スローにClassNotFoundException { クラスclazz = Class.forNameの(クラス名)。 リターンclazz。 } プライベート 静的 <?>クラスgetClazz1(Objectオブジェクト){ クラスclazz = object.getClass()。 リターンclazz。 } プライベート 静的クラス<?> getClazz2(){ クラスclazz = model.SomeClass。クラスリターンclazz。 } / * 经常使用的クラス对象的3个方法* / プライベート 静的文字列useClazz0(クラスclazz){ 文字列fullyQualifiedName = clazz.getName()。 返すfullyQualifiedNameを。 } プライベート 静的文字列useClazz1(クラスclazz){ 文字クラス名 = clazz.getSimpleName()。 返すクラス名を、 } // 例:プライベート // 例:抽象 プライベート 静的オブジェクトuseClazz2(クラスclazz)がスローIllegalAccessExceptionが、ないInstantiationExceptionを{ Objectオブジェクトを = clazz.newInstance()。 戻り値のオブジェクト。 } / * 获得コンストラクタ对象的3个方法* / プライベート 静的コンストラクタ<?> [] getConstructorObject0(クラスclazz){ コンストラクタ []コンストラクタ=の<?> clazz.getConstructors(); 戻り値のコンストラクタ。 } プライベート 静的コンストラクタ<?> [] getConstructorObject1(クラスclazz){ コンストラクタ []コンストラクタ=の<?> clazz.getDeclaredConstructors(); 戻り値のコンストラクタ。 } プライベート 静的<?>コンストラクタはgetConstructorObject2(クラスclazz)スローないNoSuchMethodException { コンストラクタコンストラクタ= clazz.getConstructor(工ass。<?> クラス、AnotherClass。クラス、OneClassMore。クラス)。 戻り値のコンストラクタ。 } プライベート 静的 <?>コンストラクタgetConstructorObject3(クラスclazz)スローないNoSuchMethodException { コンストラクタコンストラクタ= clazz.getDeclaredConstructor(工ass。<?> クラス、AnotherClass。クラス、OneClassMore。クラス)。 返しますコンストラクタ。 } / *经常使用的コンストラクタ对象的2个方法* / プライベート 静的オブジェクトuseConstructorObject0(コンストラクタ<?>コンストラクタ)がスローIllegalAccessExceptionが、InvocationTargetExceptionが、ないInstantiationException { // ここで下を、変数のオーバーライドは== trueの場合、JVMはチェックしませwilll場合アクセス修飾子 オブジェクトのオブジェクト= constructor.newInstance(工ass()、新しい AnotherClass()、新しいOneClassMore())。 戻り値のオブジェクト。 } プライベート 静的 無効 useConstructorObject1(コンストラクタ<?>コンストラクタ){ //AccessibleObjectを、「スーパーやスーパー」コンストラクタのクラスで定義されている変数の値「上書き」変更ここで下 constructor.setAccessible(真の); } / * 还有一些* / プライベート 静的 <?>クラスuseConstructorObject2(<?>コンストラクタコンストラクタ){ クラスclazz = constructor.getDeclaringClass()。 リターンclazz。 } プライベート 静的 INT useConstructorObject3(コンストラクタ<?> コンストラクタ){ int型修飾子=のconstructor.getModifiers()。 リターン剤; } プライベート 静的文字列useConstructorObject4(コンストラクタ<?> コンストラクタ){ // コンストラクタ名はクラス名と同じ 文字列constructorName = constructor.getName()。 // 。ここで下のgetDeclaringClass()のgetName(); 返すconstructorNameを。 } / * 获取フィールド对象的4个方法* / プライベート 静的フィールド[] getFieldObject0(クラスclazz){ フィールド[]フィールド =のclazz.getFields()。 リターンフィールド; } プライベート 静的フィールド[] getFieldObject1(クラスclazz){ フィールド[] declaredFieldsの =のclazz.getDeclaredFields()。 返すdeclaredFieldsを。 } プライベート 静的フィールドgetFieldObject2(クラスclazz)スロー持たないNoSuchFieldException { フィールドのフィールド = clazz.getField( "theFieldName" )。 リターンフィールド; } プライベート 静的フィールドgetField3(クラスclazz)スロー持たないNoSuchFieldException { フィールドのフィールド = clazz.getDeclaredField( "theFieldName" )。 リターンフィールド; } / * 经常使用的フィールド对象的3个方法* / プライベート 静的オブジェクトuseFieldObject0(項目フィールド、オブジェクトのオブジェクト)がスローIllegalAccessExceptionが{ オブジェクトfieldValueの = field.get(オブジェクト)。 返すfieldValueのを。 } プライベート 静的 ボイド useFieldObject1(フィールドフィールド、オブジェクトのオブジェクト)がスローIllegalAccessExceptionが{ // フィールド値としてオブジェクトを field.set(オブジェクト、新しいオブジェクト())。 } プライベート 静的 ボイド同じプロセスuseFieldObject2(フィールドフィールド){ // field.setAccessible(真の); } / * 还有一些* / プライベート 静的 INT useFieldObject3(フィールドフィールド){ int型修飾子= field.getModifiers()。 リターン剤; } プライベート 静的文字列useFieldObject4(フィールドフィールド){ 文字列フィールド名 = field.getName()。 返すフィールド名を。 } / * 获取方法对象的4个方法* / プライベート 静的メソッド[] getMethodObject0(クラスclazz){ 方法[]メソッド =clazz.getMethods(); リターン方法。 } プライベート 静的メソッド[] getMethodObject1(クラスclazz){ 方法[]メソッド = clazz.getDeclaredMethods()。 リターン方法。 } プライベート 静的メソッドgetMethodObject2(クラスclazz)スローないNoSuchMethodException { メソッドのメソッド = clazz.getMethod( "someMethodName"、工ass。クラス、AnotherClass。クラス、OneClassMore。クラス)。 リターン方法。 } プライベート 静的メソッドgetMethodObject3(クラスclazz)スローないNoSuchMethodException { メソッドのメソッド = clazz.getDeclaredMethod( "someMethodName"、工ass クラス。、AnotherClass クラス。、OneClassMore クラス)。 リターン方法。 } / * 经常使用的フィールド对象的2个方法* / プライベート 静的オブジェクトuseMethodObject0(メソッドのメソッド、オブジェクト・オブジェクト)スローにInvocationTargetException、IllegalAccessExceptionが{ オブジェクトreturnedobject = method.invoke(オブジェクト、新しい工ass()、新しい AnotherClass()は、新規OneClassMore())。 リターンreturnedobject。 } プライベート 静的 ボイドuseMethodObject1(方法法){ method.setAccessible()。 } / * 还有一些* / プライベート 静的 INT useMethodObject2(方法法){ int型修飾子=のmethod.getModifiers()。 リターン剤; } プライベート 静的文字列useMethodObject3(方法法){ 文字列methodNameの = method.getName()。 返すmethodNameの; } / * ヒント getMethods()によって、一意のクラスまたはインタフェースを与えるために、アレイとそのすべての親クラス公開インタフェースメソッドを継承する。 getDeclaredMethods(BY)を含む一意のクラスまたはインタフェースのすべてのメソッドを、(与えるためにパブリック及び非公開)。 * / / * 単に空の便宜のためのテンプレートとして* / プライベート 静的 ボイドM(){ } }

 

おすすめ

転載: www.cnblogs.com/zhang-xing-shuo/p/11220850.html