问题描述
在通过配置文件创建对象时,Class.forName()报类找不到异常,但直接将字符串传入又可以创建。
.properties文件
相关代码如下:
try(InputStream resourceAsStream = CarFactory.class.getClassLoader().getResourceAsStream("CarName.properties")) {
Properties properties = new Properties();
properties.load(resourceAsStream);
//从properties中获取全类名
Set<Object> keys = properties.keySet();
for(Object key:keys){
//获取全类名
String o = (String)properties.get(key);
//通过反射创建对象
Class<?> aClass = Class.forName(o);
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(null);
Object car = declaredConstructor.newInstance(null);
//存入容器
hashMap.put((String)key,car);
}
} catch (Exception e) {
e.printStackTrace();
}
原因分析:
查了相关资料才发现,.properies文件中时键值对类型,而且键和值都是Striing类型,都不需要加"",否则会将""当成字符串中的一部分
解决方案:
将.properies文件中的""去掉,就不会报错了