黑马程序员技术交流社区
标题:
反射的问题
[打印本页]
作者:
yangjie
时间:
2013-9-28 19:32
标题:
反射的问题
本帖最后由 yangjie 于 2013-9-28 20:06 编辑
自己打高新技术56里的代码的时候,出了个错怎么也搞不懂。
放上来请大家看看,求解释
=================================================================
已解决。xxx.advice = Adivce←单词打错了。之前还特地检查过好几遍拼写都没发现,OTZ
<P>
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
public class Test
{
public static void main(String[] args) throws Exception
{
//读取配置文件内容
String name = "xxx";
Properties prop = new Properties();;
prop.load(new FileInputStream("properties"));
//通过读取到的字符串建立对象
Object target = Class.forName(prop.getProperty(name + ".target")).newInstance();
Advice advice = (Advice)Class.forName("Advice").newInstance();//这句运行成功
//Advice advice = (Advice)Class.forName(prop.getProperty(name + ".advice")).newInstance();//这句运行就是ClassNotFoundException
System.out.println(prop.getProperty(name + ".advice"));//把读到的值打出来看看,是Advice没错
System.out.println("---"+target.getClass().getName());
System.out.println("---"+advice.getClass().getName());
}
}
复制代码
properties中的内容
#xxx = java.util.ArrayList
xxx = ProxyBeanFactory
xxx.target = java.util.TreeSet
xxx.advice = Adivce
作者:
Jam-l
时间:
2013-9-28 20:00
首先56的代码肯定不是这样打的。
Object target = Class.forName(prop.getProperty(name + ".target")).newInstance();
Advice advice = (Advice)Class.forName("Advice").newInstance();
这两个都是配置文件里的,应该都应该放进BeanFactory类里。
而你的错误是配置的properties中没有键值对,键为Advice的类,取出来的肯定是空
这样prop.getProperty()找的时候肯定会跳出异常。
你应该把xxx.advice = Adivce 的 Advice类改为全类名
然后把dvice advice = (Advice)Class.forName("Advice").newInstance()改为
dvice advice = (Advice)Class.forName(prop.getProperty(name + ".advice")).newInstance()这样取出的才是Advice类
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2