getClasses和getDeclaredClasses的區別:
getClasses得到該類及其父類所有的public的內部類。
getDeclaredClasses得到該類所有的內部類,除去父類的。
public class SpiMain { private class SpiMainPrivate { } public class SpiMainPublic { } } public class Main extends SpiMain{ private class MainPrivate { } public class MainPublic { } } 運行如下代碼: System.out.println(Arrays.toString(Main.class.getClasses())); System.out.println(Arrays.toString(Main.class.getDeclaredClasses()));
輸出:
[class anno.Main$MainPublic, class com.javartisan.spi.SpiMain$SpiMainPublic]
[class anno.Main$MainPrivate, class anno.Main$MainPublic]
對於注解
import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Component { } import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Component @Retention(RetentionPolicy.RUNTIME) public @interface Service { }
java.lang.Class#getDeclaredAnnotation方法可以獲取Service注解之上的Comnponent注解