Java 查找动态提供的.class名称的类路径

Java 查找动态提供的.class名称的类路径,java,classpath,classnotfoundexception,Java,Classpath,Classnotfoundexception,我在一个非常大的应用程序中工作,其中包含大量用户定义的类。我需要找到.class文件的完全限定类名,以便在运行时加载它 .class文件的名称作为JSON Web标记化URL中的键值对传递。我解密令牌并捕获相关参数。这些参数是重定向用户的ID和web类 Claims jwtVerified = bus.decryptJsonWebToken(token); if(jwtVerified != null){ String Id = jwtVerified.get("ID")

我在一个非常大的应用程序中工作,其中包含大量用户定义的类。我需要找到.class文件的完全限定类名,以便在运行时加载它

.class文件的名称作为JSON Web标记化URL中的键值对传递。我解密令牌并捕获相关参数。这些参数是重定向用户的ID和web类

Claims jwtVerified = bus.decryptJsonWebToken(token);
    if(jwtVerified != null){
        String Id = jwtVerified.get("ID").toString();
        String page = jwtVerified.get("page").toString();
        PageParameters pageParameters = new PageParameters();
        pageParameters.add("Id", Id);

        try {
            Class<Page> c = null;
            c = (Class<Page>) Class.forName("com.foo." + page);                         
            throw new RestartResponseException(c, pageParameters);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
声明jwtVerified=bus.decryptJsonWebToken(令牌);
如果(jwtVerified!=null){
String Id=jwtVerified.get(“Id”).toString();
字符串page=jwtVerified.get(“page”).toString();
PageParameters PageParameters=新的PageParameters();
pageParameters.add(“Id”,Id);
试一试{
c类=空;
c=(Class)Class.forName(“com.foo.”+页面);
抛出新的RestartResponseException(c,pageParameters);
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
问题是我不想硬编码“com.foo”,因为不同的页面可以作为页面变量传递。这些类生活在不同的包中(例如,“com.foo.Myclass.class”和“com.bar.MyClass2.class”)。此外,如果我没有提供完全限定的类路径,则会抛出java.lang.ClassNotFoundException。

您可以使用包,但必须确保没有两个具有相同名称的类

此代码可能是一个良好的开端:

Reflections reflections = new Reflections("com.yourpackage", new SubTypesScanner());
final Collection<Class<? extends Page>> allTypes = reflections.getSubTypesOf(Page.class);
final Map<String, Class<? extends Page>> shortNameToClass = new HashMap<>();
for (Class<? extends Page> type : allTypes) {
    shortNameToClass.put(type.getSimpleName(), type);
}
for (Map.Entry<String, Class<? extends Page>> entry : shortNameToClass.entrySet()) {
    System.out.println(entry.getKey() + "->" + entry.getValue());
}
Reflections Reflections=newreflections(“com.yourpackage”,new subsubsubstandscanner());

最终的集合“类路径”和“完全限定类名”是两个不同的东西。你是对的。我对我的问题进行了编辑,使之更加准确。