Java反射 獲取Class及Class對應資訊
阿新 • • 發佈:2018-11-26
一.獲取Class的三種方式
-
Class.forName(String clazzName) 必須指定全限定類名(com.xxx.xxx.Xxx)
-
呼叫某個類的class屬性獲取Class物件 Object.class
-
呼叫某個物件的getClass()方法 obj.getClass()
二.從Class中獲取資訊
1.獲取構造器(Constructor) getConstructor(Class<?>...parameterTypes)返回 public 指定形參的 Constructor getConstructors() 返回 public 所有的Constructor getDeclaredConstructor(Class<?>...parameterTypes) 返回 任何訪問許可權 指定形參的 Constructor getDeclaredConstructors(); 返回 所有 任何訪問許可權的Constructor 2.獲取方法(Method) getMethod(String name,Class<?>...parameterTypes) 返回 public 指定名字、形參的 Method getMethods() 返回 public 所有Method getDeclaredMethod(String name,Class<?>...parameterTypes) 返回 任何訪問許可權 指定名字、形參Method getDeclaredMethods(); 返回 任何訪問許可權 所有Method 3.獲取成員變數(Field) getField(String name) 返回 public 指定名字的 Field getFields() 返回 public 所有Field getDeclareField(String name) 返回 任何訪問許可權 指定名字 Field getDeclareFields() 返回 任何訪問許可權 所有 Field 4.獲取Class上的註解(Annotation) getAnnotation(Class<A> annotationClass) 獲取修飾該Class類的 指定型別的 Annotation getDeclaredAnnotation(Class<A> annotationClass) 獲取 修飾該Class類的、指定型別的Annotation /... jdk1.8新增.../ getAnnotations() 返回該修飾該Class類的所有Annotation getDeclaredAnnotations() 返回 修飾該Class類的 所有Annotation 5.獲取Class相關的內部類、外部類、介面類、父類 getDeclaredClasses() 返回該Class類中 所有 內部類 getDeclaringClass() 返回該Class類中 所在的 外部類(如果該類是個內部類的話) getInterfaces() 返回該Class類 所有的 已實現的介面 getSuperclass() 返回該Class類的 父類 6.其他資訊 Package getPackage() 獲取此類的包 String getName 返回該類的名稱 (全限定名 : com.xxx.xxx.Xxx) String getSimpleName()返回該類的簡稱 (單類名 : Xxx) 7.判斷方法 (返回boolean) isAnnotation() 該類是否為註解型別 (@interface定義) isAnnotationPresent(Class<? extends Annotation> annotationClass) 該類中是否使用過(某個指定)註解 isAnonymousClass() 該類是否是一個匿名類 isEnum() 該類是否是一個列舉類 isInterface() 該類是否是一個介面