我正在编写一个功能,将类放入程序的某个包中会很有帮助。另外,我只想要子类化某个类的类。
我需要这些类才能在它们上调用静态方法。
有自动方法吗?如果是这样,它会慢吗?
如果我不清楚,我想要的是这样的:
ArrayList<Class<? extends MySuperClass>> classes = ;
classes.add(MyClass.class);
classes.add(MyClass2.class);
我不想为每个类调用add,而是自动获取该类列表。
类的数量很少,所以如果自动技巧很慢,我不介意手动声明它们 - 这个应用程序适用于移动平台。
无论哪种方式,我还想知道如何为ArrayList中的每个方法调用静态方法:
// error The method nameOfStaticMethod is undefined for the type Class<capture#2-of ? extends MySuperClass>
classes.get(0).nameOfStaticMethod ();
感谢您的评论。
答案 0 :(得分:2)
Java不提供此功能。包级别没有内省。这些类可以是数据库中的记录,也可以是网络连接的另一侧。不需要存储和组织它们,以便于通过包装枚举它们。
您可以创建自定义类加载器和API,以提供列出类名的方法。
答案 1 :(得分:1)
我也想列出一个包中的所有类,但到目前为止,这样做的方法非常糟糕:
引用older SO问题:
无法为Package查询它的类(甚至是它的子包)。 http://forums.sun.com/thread.jspa?threadID=341935&start=0&tstart=0包含一个非常好的讨论,讨论为什么会出现问题,以及针对您的问题的一些解决方案。
无论如何,这是你在类上调用静态方法的方法:
Method m = Integer.class.getMethod("toString", Integer.TYPE);
System.out.println(m.invoke(null, 123));