首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java类型转换

Java类型转换
EN

Stack Overflow用户
提问于 2011-08-30 09:46:27
回答 2查看 765关注 0票数 1

我有三个文件:

ScriptProcessor.java:

代码语言:javascript
复制
public interface ScriptProcessor {
   public String someMethod();
}

ScriptProcessorDummy.java:

代码语言:javascript
复制
public class ScriptProcessorDummy implements ScriptProcessor {
   public String someMethod{
       return "some string";
   }
}

在main方法中,代码执行以下操作:

代码语言:javascript
复制
URLClassLoader loader = null;
loader = new URLClassLoader(new URL[] {new URL("JARFILE")});
if (loader != null) {
   ScriptProcessor processor = (ScriptProcessor) loader.loadClass("ScriptProcessorDummy").newInstance();
}

JARFILE包含ScriptProcessor和ScriptProcessorDummy的类文件。

代码在使用JDK1.4时运行良好,但在使用JDK1.5时,使用java.lang.ClassCastException的类型转换(到ScriptProcessor)失败。

谁能告诉我怎么解决这个问题。

谢谢,Raj

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-30 18:19:08

您需要使当前的类加载器成为要加载的新类加载器的父类,并确保jar中没有该接口的副本。

您遇到的问题表明您有两个接口副本:一个在主类加载器中,另一个在新的类加载器中。返回的对象使用单独jar中的对象,但您的类使用的是主对象。它们是不一样的。您必须确保Java在处理加载的类时使用与编译您的代码时相同的'.class‘作为接口。

要做的第一件事是在jar上'jar tf‘,看看我的两个副本的假设是否正确。如果是,请将其删除。试着跑吧。如果您现在获得了NoClassDef,请修复加载器的结构。

代码语言:javascript
复制
new URLClassLoader(urlArray, Thread.currentThread().getContextClassLoader());

假设您的环境维护上下文类加载器。或者,

代码语言:javascript
复制
new URLClassLoader(urlArray, ScriptProcessor.class.getClassLoader());
票数 1
EN

Stack Overflow用户

发布于 2011-08-30 09:58:32

尝试使用:

代码语言:javascript
复制
loader.loadClass("ScriptProcessorDummy", true).newInstance();

布尔值告诉类加载器解析类名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7237902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档