日期:2014-05-17  浏览次数:20723 次

工厂模式加载类的问题?
帮忙看一下。代码有警告。我才学这个,不知道如何改。标红色的部分。
  import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class DaoFactory {
private static TeacherDao teacherDao=null;
private static StudentDao studentDao=null;
private static ClassRelationDao classRelationDao=null;
//工厂使用单例模式。
  private static DaoFactory instance=new DaoFactory();
  
  //将构造方法变成私有的,不让别人来构造。
  private DaoFactory()
  {
 
try {
//完成初始化的工作
//从Properties文件中把信息读取出来。
Properties prop=new Properties();
InputStream inStream=DaoFactory.class.getClassLoader()
.getResourceAsStream("daocofing.properties");
prop.load(inStream);
String teacherDaoClass=prop.getProperty("teacherDaoClass");
//将teacherDaoClass这个类装载到虚拟机里
Class classObjectTeacher=Class.forName(teacherDaoClass);
//获得实例。
teacherDao=(TeacherDao)classObjectTeacher.newInstance();
String studentDaoClass=prop.getProperty("studentDaoClass");
//将studentDaoClass这个类装载到虚拟机里
Class classObjectStudent=Class.forName(studentDaoClass);
//获得实例。
studentDao=(StudentDao)classObjectStudent.newInstance();
String classRelationDaoClass=prop.getProperty("classRelationDaoClass");
//将classRelationDaoClass这个类装载到虚拟机里
Class classObjectClassRelation=Class.forName(classRelationDaoClass);
//获得实例。
classRelationDao=(ClassRelationDao)classObjectClassRelation.newInstance();
 
} catch (Exception e) {
// 将异常抛出去,这是一个静态初始化错误。
throw new ExceptionInInitializerError(e);
}
 
  }
   
  public static DaoFactory getInstance()
  {
return instance;  
  }
  //工厂里面提供一个方法,用来生产UserDao这个产品。
  public TeacherDao getUserDao()
  {
return teacherDao;
  }
}
 

------解决方案--------------------
一、忽略警告改为
@SuppressWarnings("rawtypes")
Class classObjectTeacher=Class.forName(teacherDaoClass);

二、改为
Class<?> classObjectTeacher=Class.forName(teacherDaoClass);
------解决方案--------------------
是LZ那三个Dao没定义啊
------解决方案--------------------
+1可以这样,但其实,警告是没有关系的。
探讨
一、忽略警告改为
@SuppressWarnings("rawtypes")
Class classObjectTeacher=Class.forName(teacherDaoClass);

二、改为
Class<?> classObjectTeacher=Class.forName(teacherDaoClass);

------解决方案--------------------
是否有默认构造函数?DAO的