在运行时,查找Java应用程序中扩展基类的所有类
我想做这样的事:
List<Animal> animals = new ArrayList<Animal>();for( Class c: list_of_all_classes_available_to_my_app() )
if (c is Animal)
animals.add( new c() );
所以,我想看看我的应用程序世界中的所有类,当我找到一个从动物界下来的类时,我想创建一个新的对象,并将它添加到列表中。这允许我添加功能,而不必更新内容列表。我可以避免下列情况:
List<Animal> animals = new ArrayList<Animal>();animals.add( new Dog() );animals.add( new Cat() );animals.add( new Donkey() );...
使用上面的方法,我可以简单地创建一个新的类,这个类扩展了Properties,它将自动被获取。
更新日期:2008年10月16日上午9时。太平洋标准时间:
现在有几个库可以在这方面提供帮助。回答 org.反射看上去不错。也类图来自卢克·和记黄埔回答看上去很有趣。答案中还有更多的可能性。
另一种陈述我想要的东西的方法是:我的动物类中的一个静态函数查找并实例化了所有继承自动物的类-没有任何进一步的配置/编码。如果我必须进行配置,那么我最好还是将它们实例化在动物类中。我理解这一点,因为Java程序只是.class文件的松散联合,这正是它的方式。
有趣的是,这似乎是相当琐碎在C#。