通过反思获得所有内部课程

Rom*_*man 7 java

我有以下问题.我有这个漂亮的类,现在我想获得扩展该类(内部类)的所有类,并用它填充'classList'.(当然是自动的)

public abstract class CompoundReference {

    private static List<Class<? extends CompoundReference>> classList
            = new ArrayList<Class<? extends CompoundReference>>();


    @CompoundKey(gsType = User.class, dbType = UserDetailsMappings.class)
    public static class CUser extends CompoundReference {
    }

    @CompoundKey(gsType = Catalog.class, dbType = CatalogDetailsMappings.class)
    public static class CCatalog extends CompoundReference {
    }

    @CompoundKey(gsType = Product.class, dbType = ProductDetailsMappings.class)
    public static class CProduct extends CompoundReference {
    }

    @CompoundKey(gsType = Category.class)
    public static class CCategory extends CompoundReference {
    }

    @CompoundKey(gsType = Poll.class, dbType = PollDetailsMappings.class)
    public static class CPoll extends CompoundReference {
    }
    // much mroe inner classes
Run Code Online (Sandbox Code Playgroud)

一些手动解决方案只是主要的这样一个静态块,这是我不想做的事情.

  static {
        classList.addAll(Arrays.asList(CUser.class, CCatalog.class,
                CProduct.class, CCategory.class,
                CPoll.class, CComment.class, CWebPage.class,
                CReview.class, CPost.class, CMessage.class, CStory.class,CPicture.class));

    }
Run Code Online (Sandbox Code Playgroud)

Yis*_*hai 9

classList.addAll(Arrays.asList(CompoundReference.class.getDeclaredClasses()));
Run Code Online (Sandbox Code Playgroud)

我应该注意,从泛型的角度来看,这是不安全的,因为getDeclaredClasses方法可以返回所有类的类,而不仅仅是封闭类的子类,它只是一个数组Class<?>,所以你可能需要迭代并确认/根据您的用例需要进行投射.