当前位置: 首页 > 知识库问答 >
问题:

类异常:com.sun.proxy.$ProxyX不能强制转换到类

张翰海
2023-03-14

我有一个Springbean(ChildBean扩展了父类),它扩展了一个抽象类(Parent实现了可运行的)。

public abstract class Parent implements Runnable {
    public final void run() {
        // some code
    }

    public int overridenFunct() {
        // some code
    }
}

导致ClassCastExcture的子类变体:

@Transactional
@Scope("prototype")    
@Service("beanName")
public class ChildBean extends Parent {
    @Override
    public int overridenFunct() { 
        // some diff code 
    }
}

在我重写子bean中父类的公共非抽象方法之前,一切都正常。之后,当我试图创建该bean的实例时,会抛出一个ClassCastException。

Parent p = (Parent) appContext.getBean("beanName");

getBean()返回的Bean对象是一个ChildBean类实例(通过调试器检查)。为什么将ChildBean对象转换为其抽象的父类不起作用?因此,如果没有在ChildBean中实现的overridenFunct(),一切都很好。有人能告诉我这里有什么问题吗?

更新:

将方法overridingFunct()更改为protected可修复此问题。但是如果我需要重写一个公共方法呢?允许吗?我正在使用Spring3.2。8.

更新:

好吧,我没有理解为什么在抽象父级中重写公共方法会导致ClassCastException。作为解决方案,我做了以下工作:创建了一个接口,其中包含所有具有公共逻辑的公共方法,一个抽象类,它实现了该接口和所有“公共”方法。然后,所有子bean都从该抽象类扩展,实现其特定逻辑。

共有1个答案

宁锐
2023-03-14

代码的问题是,appContext.getBean("beanName")不返回继承自类的对象。

对于名为Parent的类,一个常见的错误是导入错误。检查是否从正确的包导入。

如果这不能解决问题,请确保appContext.getBean("beanName")返回您认为返回的对象。它可能会返回一个Bean Object,该对象不继承自类。

上下文甚至可能还不包含您的ChildBean对象。确保事先将其添加到其中。

 类似资料:
  • 例外情况: java.lang.ClassCastException:com.interconnect.library.gcm.util.checkplayServices(util.java:96),com.interconnect.library.gcm.regiseter.handleRegister(regiseter.java:53),com.interconnect.library.g

  • 问题内容: 尝试将结果集强制转换为映射类时,我收到了hibernate类的类强制转换异常…我能够查看返回的结果集中的数据…但是它以Object []的形式返回我可以将Object []设置为List …我可以正确地进行hibernate映射吗?我从查询中获取了正确的数据,但映射不正确… 映射 映射类 参加班 主要 问题答案: 对于测试,我建议您在产生类强制转换异常的语句周围放置一个try-catc

  • 调用AffineTransform: 它驻留在自定义形状类(YingYang)中。 当我进行调用时,当我试图从绘图面板或在类本身(如果我将返回类型更改为YingYang)中将它转换回一个YingYang时,我会得到一个类转换异常。 java.lang.ClassCastException:java.awt.Geom.Path2D$Double不能强制转换为Animation.Yingyang 任何

  • 我只是想在java中将一些类对象插入到优先级队列中。但是出现错误“com.java.split.MyComp不能转换为java.util.Collection”。我尝试了不同的选项,将不同的参数传递给, 代码: 导入java。util。比较器;导入java。util。优先队列; 但都没有起作用。我有个例外, 线程“main”java中出现异常。lang.ClassCastException:com

  • 线程“main”java.lang.ClassCastException:java.base/jdk.internal.loader.ClassLoaders$AppClassLoader不能强制转换为java.base/java.net.urlClassLoader(位于org.springframework.boot.devtools.restart.defaultrestartinitial

  • 我模拟了Jsch()类,并在下面的方法中获得了类强制转换异常。 原始方法。 联机获取Mockito异常。 例外情况: java.lang.ClassCastException:com.jcraft.jsch。频道$MockitoMock$1983492043不能转换为com.jcraft.jsch.ChannelSftp 测试用例调用方法。