我有以下代码:
private void method(final Object obj){
if (obj instanceof Processor){// assume Processor is some class
ExecutorService ex = Executors.newSingleThreadExecutor();
ex.execute(new Runnable() {
@Override
public void run() {
process((Processor) obj);//get ClassCastException here
}
});
}
private void process(final Processor a){
//do something
}
我的问题是,即使我检查obj是否是Processor
类的实例,然后我只将其转换为Processor
run
内部ClassCastException
方法,我仍然得到process
在我调用{{1}}()方法的行,为什么?
答案 0 :(得分:1)
这是我要做的,因为obj
不是最终的。
if (obj instanceof Processor) {
final Processor processor = (Processor) obj; // use processor instead of obj.
答案 1 :(得分:1)
当您有两个类加载器从两个不同的源加载相同的类名时,有时会在同一个类之间发生转换异常,并且这些源不相同。我有时在两个应用程序之间调用EJB方法时会看到这个问题,这两个应用程序都从它们自己的内部打包jar文件加载“相同”类。如果这些内部文件不对齐,则会发生这种情况。你有没有机会从两个不同的地方加载同一个班级?
答案 2 :(得分:0)
method
(..)吗?为什么不:
interface Processable<I, O> {
O process(I input);
}
并拥有一个NoOp
处理器,它什么都不做。你现在做的不是OO
。