Class类中的getEnclosingXX、getDeclaredXX
生活随笔
收集整理的這篇文章主要介紹了
Class类中的getEnclosingXX、getDeclaredXX
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自??Class類中的getEnclosingXX、getDeclaredXX
一、getEnclosingXX
getEnclosingClass():該類是在那個類中定義的, 比如直接定義的內部類或匿名內部類
getEnclosingConstructor():該類是在哪個構造函數中定義的,比如構造方法中定義的匿名內部類
getEnclosingMethod():該類是在哪個方法中定義的,比如方法中定義的匿名內部類
實例
package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Method; /** * @author zhangquanit */ public class Outer { public Outer() { // 構造方法中的匿名內部類 InnerClass innerClass = new InnerClass() { @Override public void fun() { getEnclosing(this.getClass()); /** * enclosingClass=class reflect.Outer * enclosingConstructor=public reflect.Outer() * enclosingMethod=null */ } }; innerClass.fun(); } // 匿名內部類 static InnerClass innerClass = new InnerClass() { public void fun() { getEnclosing(this.getClass()); /** * enclosingClass=class reflect.Outer * enclosingConstructor=null * enclosingMethod=null */ }; }; public static void test() { // 方法中的匿名內部類 InnerClass innerClass = new InnerClass() { @Override public void fun() { getEnclosing(this.getClass()); /** * enclosingClass=class reflect.Outer * enclosingConstructor=null * enclosingMethod=public static void reflect.Outer.test() */ } }; innerClass.fun(); } // 內部類 public static class InnerClass { public InnerClass() { } public void fun() { } } public static void main(String[] args) { System.out.println("------內部類------"); getEnclosing(InnerClass.class); System.out.println("------匿名內部類------"); innerClass.fun(); System.out.println("------方法中的匿名內部類------"); Outer.test(); System.out.println("------構造函數中的匿名內部類------"); new Outer(); } /** * getEnclosingClass:該類是在那個類中定義的, 比如直接定義的內部類或匿名內部類 * getEnclosingConstructor:該類是在哪個構造函數中定義的,比如構造方法中定義的匿名內部類 * getEnclosingMethod:該類是在哪個方法中定義的,比如方法中定義的匿名內部類 * * @param cls */ private static void getEnclosing(Class cls) { Class enclosingClass = cls.getEnclosingClass(); Constructor enclosingConstructor = cls.getEnclosingConstructor(); Method enclosingMethod = cls.getEnclosingMethod(); System.out.println("enclosingClass=" + enclosingClass); System.out.println("enclosingConstructor=" + enclosingConstructor); System.out.println("enclosingMethod=" + enclosingMethod); } private static void getDecalared() { } }二、getDeclaringClass
getDeclaringClass :獲取當前類定義所在的類.
package reflect; import java.util.Arrays; /** * @author zhangquanit */ public class Outer { // 內部類 public static class InnerClass { public InnerClass() { } public void fun() { } } // 內部接口 public interface InnerInterface { } public static void main(String[] args) { Class<?> declaringClass = InnerClass.class.getDeclaringClass(); System.out.println("InnerClass定義所在類為:"+declaringClass);//class reflect.Outer declaringClass =InnerInterface.class.getDeclaringClass(); System.out.println("InnerInterface定義所在類為:"+declaringClass);//class reflect.Outer } }三、getDeclaredXX
獲取當前類中的成員。比如當前類中定義的內部類、構造函數、成員變量、方法。
// 1.獲取當前類中的所有類、接口、枚舉、注解類等。 (不包括繼承的) Class<?>[] declaredClasses = Outer.class.getDeclaredClasses(); System.out.println(Arrays.toString(declaredClasses)); // 打印 [class reflect.Outer$InnerClass, interface reflect.Outer$InnerInterface] // 2.當前類上直接使用的注解 (不包括繼承的) Annotation[] declaredAnnotations = Outer.class.getDeclaredAnnotations(); System.out.println(Arrays.toString(declaredAnnotations)); // 打印 [@reflect.MyAnnotation(intValue=0)] // 3.當前類中的所有構造函數 (不包括繼承的) Constructor<?>[] declaredConstructors = Outer.class.getDeclaredConstructors(); System.out.println(Arrays.toString(declaredConstructors)); // 打印 [public reflect.Outer(int), public reflect.Outer()] // 4.當前類中的所有成員變量 (不包括繼承的) Field[] declaredFields = Outer.class.getDeclaredFields(); // Outer.class.getDeclaredField(name) System.out.println(Arrays.toString(declaredFields)); // 5.當前類中的所有方法 (不包括繼承的) Method[] declaredMethods = Outer.class.getDeclaredMethods(); // Outer.class.getDeclaredMethod(name, parameterTypes) System.out.println(Arrays.toString(declaredMethods));總結
以上是生活随笔為你收集整理的Class类中的getEnclosingXX、getDeclaredXX的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果 CEO 库克到访成都,晒 iPho
- 下一篇: B 社全球发行负责人 Pete Hine