泛型子类转换出错啦,请求大侠支援

kevinhood 2010-09-16 04:31:35
ssh架构,使用泛型
泛型基类DAO<T>

HibernateDAO<T> extends HibernateDaoSupport implements DAO<T>{
//里面实现接口的CRUD及其他方法
}


public class ACLService extends AbstractHibernateDAO<ACL>{
//继承的一个子类

public String sayHello(){
return "hello";
}
}


现在在此类中实现了一个sayHello方法

使用如下方法测试
public static void main(String args[]) throws Exception{
String[] loc = {"spring/applicationContext_transaction.xml","spring/applicationContext_model.xml"};
ApplicationContext ctx = new ClassPathXmlApplicationContext(loc);
ACLService acl = (ACLService)ctx.getBean("ACLService");
System.out.println(acl.sayHello());

}



此时问题出现,如果去掉sayHello这个方法,即ACLService类内什么都不写,那么执行正常,调用父类方法也正常
如果加上这个sayHello方法,那么会提示如下错误

java.lang.ClassCastException: $Proxy4 cannot be cast to com.company.project.service.ACLService

这是为什么呀
...全文
110 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
t150ckh 2010-09-27
public String sayHello(){
return "hello";
}
这个方法在接口定义了吗?或者说父类定义了?

HibernateDAO<T> 这个类与AbstractHibernateDAO<T>是什么关系,从你的内容中可以看到是共同继承了HibernateDaoSupport 这个类吧... ACLService类 extends AbstractHibernateDAO<ACL>似乎与HibernametDAO没什么关系吧.... AbstractHibernateDAO<ACL>类中这个ACL是什么东东.....

.你的接口中定义了些什么....
回复
kevinhood 2010-09-17
[Quote=引用 10 楼 leehomwong 的回复:]
错是因为在Action中将ApplicationModuleA 强制转换成ApplicationModuelB,而这两个Application之间没有任何继承或实现关系,LZ把XML文件贴出来看看
[/Quote]

不知大侠要哪个xml文件
回复
24K純帥 2010-09-17
错是因为在Action中将ApplicationModuleA 强制转换成ApplicationModuelB,而这两个Application之间没有任何继承或实现关系,LZ把XML文件贴出来看看
回复
kevinhood 2010-09-17
自己顶了我就
回复
Dota_noney 2010-09-17
也没看出哪错 了,求高人
回复
qqzhuyuehe 2010-09-17
不懂!帮顶!!等待高手!
回复
kevinhood 2010-09-17
[Quote=引用 3 楼 wypbt1032 的回复:]
ACLService acl = (ACLService)ctx.getBean("ACLService");
你在Spring 配置里面,bean(ACLService)是用那个类来new的???
如果是用父类hibernateDAO,那要是子类里有自己的内容,当然就不能强制转换了
[/Quote]

<bean name="ACLService" class="com.company.project.service.ACLService">
<property name="sessionFactory" ref="sf"></property>
</bean>

ACLService是这样声明的

public class ACLService extends AbstractHibernateDAO<ACL> {
//在这里不写代码,那么调用父类AbstractHibernateDAO<ACL>的方法就一切ok
//一旦写了代码,那么调用就会出错,无法转换
}
回复
kevinhood 2010-09-17
是我手误写错啦,
DAO<T> HibernateDaoSupport
| |
AbstractHibernateDAO<T>
|
ACLService

应该是这样的继承关系
回复
t150ckh 2010-09-16
[Quote=引用 2 楼 kevinhood 的回复:]
大侠,就是 DAO<T> (interface)
|
HibernateDAO<T> //还继承了HibernateDAO<T>
|
ACLService

在aclService里写方法,调用就出错
[/Quote]

从你的这个关系中,及上面的继承来看这个类 AbstractHibernateDAO 是从哪来的?没有看明白你的用意.
回复
wypbt1032 2010-09-16
ACLService acl = (ACLService)ctx.getBean("ACLService");
你在Spring 配置里面,bean(ACLService)是用那个类来new的???
如果是用父类hibernateDAO,那要是子类里有自己的内容,当然就不能强制转换了
回复
kevinhood 2010-09-16
大侠,就是 DAO<T> (interface)
|
HibernateDAO<T> //还继承了HibernateDAO<T>
|
ACLService

在aclService里写方法,调用就出错
回复
WANGYQ_412 2010-09-16
看不懂你写的这个关系,以前都用泛型实现的 都没有问题 代码太少
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-09-16 04:31
社区公告
暂无公告