获取包中声明的所有Java类的名称
我正在编写一个功能,它将有助于在我的程序的某个包中获取类。而且,我只想要属于某个类的类 我需要这些类,以便对它们调用静态方法 有没有一种自动的方法可以做到这一点?如果是这样,速度慢吗 如果我不清楚,我想要的是这样的:获取包中声明的所有Java类的名称,java,class,package,Java,Class,Package,我正在编写一个功能,它将有助于在我的程序的某个包中获取类。而且,我只想要属于某个类的类 我需要这些类,以便对它们调用静态方法 有没有一种自动的方法可以做到这一点?如果是这样,速度慢吗 如果我不清楚,我想要的是这样的: ArrayList<Class<? extends MySuperClass>> classes = ; classes.add(MyClass.class); classes.add(MyClass2.class); ArrayListJava不提
ArrayList<Class<? extends MySuperClass>> classes = ;
classes.add(MyClass.class);
classes.add(MyClass2.class);
ArrayListJava不提供这种功能。在包级别没有内省。这些类可以是数据库中的记录,也可以是网络连接另一端的记录。不需要存储和组织它们,以便于按包枚举
您可以制作自定义类加载器和API,以提供列出类名的方法。我也希望列出包中的所有类,但到目前为止,这种方法非常糟糕:
- 就像JOTN建议的那样-需要文件访问权限-如果是jar,则不需要
- 列出一个JAR条目-嗯,还需要JAR文件
引用一个问题:
无法查询包的类(甚至其子包)。包含一个非常好的关于为什么这是有问题的讨论,以及一些解决问题的方法
无论如何,下面是如何在类上调用静态方法:
Method m = Integer.class.getMethod("toString", Integer.TYPE);
System.out.println(m.invoke(null, 123));
不幸的是,链接已断开,鉴于Oracle网站的总体状态,很难找到。这可能是断开的链接:您能否提供一个说明,说明为什么不包括此功能/很难实现此功能?这些类可能是数据库中的记录,或在网络连接的另一端。没有要求对它们进行存储和组织,以便于按包枚举。请将您的评论添加到答案中(“Frummeled”是荷兰俚语,我认为英语中也应该使用它,意思是:在多次“Frummeled”之后,以某种方式使其适合)。
Method m = Integer.class.getMethod("toString", Integer.TYPE);
System.out.println(m.invoke(null, 123));