大家好,小弟我根据《深入浅出Hibernate》中介绍的DAO 方法配置自己的项目,但是运行时一直显示:java.lang.ClassCastException: java.lang.Class cannot be cast to dao.UserDao
我也知道这是类型不能强制转化的问题,但是我不晓得怎么改,请大家帮帮我吧,真是太感谢了。。
UserDao为DAO接口类
1、DAO代理类
package dao.proxy;
import java.util.List;
import java.util.Map;
import javaBean.UserBean;
import dao.DaoFactory;
import dao.UserDao;
public class UserProxy {
public static List queryArray(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArray(map);
}
public static boolean insert(UserBean user){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.insert(user);
}
public static List queryArrayShop(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArrayShop(map);
}
public static List queryArrayAdmin(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArrayAdmin(map);
}
public static boolean passwordModify(String userName,String password,String radioname){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.passwordModify(userName, password, radioname);
}
}
2、dao工厂类
package dao;
import java.util.*;
public class DaoFactory {
private static HashMap daoMap=null;
public static Object getDao(Class daoInterface){
initial();//初始化
Object dao=daoMap.get(daoInterface);
if(dao==null)
System.out.println("No Implementation found of Dao interface!"+daoInterface.getName());
return dao;
}
/*初始化DaoFctory
 * 加载DAO Interface,在daoMap中实例化*/
public static synchronized void initial(){
if(daoMap==null)
daoMap=DAOConfig.load();//根据配置文件中加载Dao实现配置
}
}
3、配置类Config.class
package dao;
import java.util.*;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.igfay.jfig.JFig;
import org.igfay.jfig.JFigIF;
import org.igfay.jfig.JFigLocator;
public class DAOConfig {
private static Logger logger=LogManager.getLogger(DAOConfig.class);
private static final String DAO_CONFIG_FILE="dao/dao.xml";
private static final String DAO_CONFIG_SECTION="DAO";
/*加载DAO 接口*/
public static synchronized HashMap load(){
HashMap map=new HashMap();
JFigLocator jfigLocator=new JFigLocator(DAO_CONFIG_FILE);
JFigIF daoConfig=JFig.getInstance(jfigLocator);
Properties prop=daoConfig.getSectionAsProperties(DAO_CONFIG_SECTION);
Enumeration enumSection=prop.keys();
while(enumSection.hasMoreElements()){
String daoIFace=(String)enumSection.nextElement();
String daoImpl=prop.getProperty(daoIFace);
try{
Class iface=ClassToolKit.loadClass(daoIFace);//调用类ClassToolKit
Class impl=ClassToolKit.loadClass(daoImpl);
//将接口作为HashMap索引,实现类作为值
map.put(iface, impl);
}catch(ClassNotFoundException e){
logger.debug("No Class Found:"+e.getMessage());
}
}
return map;
}
}
4、加载类ClassToolKit.class
package dao;
public class ClassToolKit {
public static Class loadClass(String className)throws ClassNotFoundException{
Class clas=null;
try{
/*先尝试用当前ClassLoader加载*/
clas=Thread.currentThread().getContextClassLoader().loadClass(className);
}catch(Exception e){
e.printStackTrace();
}
if(clas==null)
clas=Class.forName(className);//如果通过当前ClassLoader加载失败,使用系统ClassLoader加载
return clas;
}
}
5.xml内容:dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <section name="DAO">
    <entry key="dao.UserDao" value="dao.simple.UserDaoSimple"/>
  </section>
</configuration>

解决方案 »

  1.   

    这么多地方用了强制转换啊~
    你在有可能出错的地方都用System.out.pring();来测试哪里会出错啊
      

  2.   

    UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
    我想是这行代码,但我不知道怎么改才能强制转化顺利
      

  3.   

    控制台就显示Unhandled Exception thrown: class java.lang.ClassCastException
    UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class)这句话的意识是UserDao是DAO接口类,DaoFactory.getDao(UserDao.class)是获取UserDao对应的DAO实现类,此方法返回的是Object类型,我不知道该怎么转化。可书上就是这么转化的,所以我参考来用用,结果不行。大家帮我一下吧。