Reflection API - ClassNotFound异常

时间:2016-04-03 07:37:13

标签: java reflection classnotfoundexception

场景:我在驱动器的文件夹中有java类。我想调用一个特定类的方法,比如Regex。 我可以使用Reflection API来调用方法吗?我有以下代码:

File dir = new File("H:/TestFolder/sample");
    File[] directoryListing = dir.listFiles();
    if (directoryListing != null) {
        for (File child : directoryListing) {
            File[] dirListing = child.listFiles();
            for (File fileName : dirListing) {
                if (fileName.getName().equals("Regex.java")) {
                    Class<?> clazz;
                    try {

                        clazz = Class.forName("Regex");
                        Constructor<?> ctor = clazz.getConstructor();
                        Object regexClass = ctor.newInstance();
....}

我得到了ClassNotFoundException。有人能告诉我我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

该类实际上称为[packageName].Regex,因为您已在名为[packageName]的某个包中声明了它。

修改即可。 Peter Lawrey指出,如果来源是H:/TestFolder/sample,那么包裹必须是sample。因此,该类将被称为sample.Regex,而不是Regex。这假设基础包不是TestFolder。如果是,则TestFolder.sample.Regex。我相信你明白了。请阅读Lawrey先生的评论below

Class.forName()获取指定包名称的类名。来自{className变量的[docs],

  

className - 所需类的完全限定名称。

这种特异性应该取ClassNotFoundException

注意即可。我希望您的Regex.java已编译为生成Regex.class文件。你的IDE应该这样做。

答案 1 :(得分:0)

可能是一个愚蠢的问题但是。您是否检查过这些类是否在类路径中?

我的意思是。该文件夹是代码的 src ,还是要检查和加载的外部文件夹?

类应该在类路径中,以便通过反射来初始化它们的对象。