什么时候将两个类视为相同?比如,有没有什么东西可以作为一个类的签名?如果是这样,签名、包信息、类名等有什么影响?我问这个是因为我需要动态加载一个类,而且我总是得到一个ClassNotFoundException
更详细一点:我正在使用 Eclipse。我abstract class Panel的package com.example.project.sub1. 还有一个class Testin package com.example.project.sub2,它将调用
类加载器加载器 = 新 URLClassLoader(
新 URL[]{新 URL("file://" + path)});
/*路径是运行时指定的,可以是不同的
工作目录以外的目录。这是路径
到我需要加载的类文件的父目录。
*/
Class<Panel> panelClass = (Class<Panel>)loader.loadClass(className);
//类名是运行时指定的。
这编译得很好。然后我将所有内容复制Panel.java到一个新目录中并创建了class MyPanel extends Panel一个Panel.java. 编译也很好,但是当我指定 new 的路径时MyPanel.class,我总是得到一个ClassNotFoundException. 知道我哪里错了吗?谢谢。
编辑:堆栈跟踪:
java.lang.ClassNotFoundException: MyPanel
在 java.net.URLClassLoader$1.run(URLClassLoader.java:202)
在 java.security.AccessController.doPrivileged(本机方法)
在 java.net.URLClassLoader.findClass(URLClassLoader.java:190)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
在 com.example.project.sub2 (Test.java:111)
在 java.lang.Thread.run(Thread.java:680)