什么时候将两个类视为相同?比如,有没有什么东西可以作为一个类的签名?如果是这样,签名、包信息、类名等有什么影响?我问这个是因为我需要动态加载一个类,而且我总是得到一个ClassNotFoundException
更详细一点:我正在使用 Eclipse。我abstract class Panel
的package com.example.project.sub1
. 还有一个class Test
in 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)