黑马程序员技术交流社区

标题: 反射怎么和具体的类对象联系起来 [打印本页]

作者: 328078121    时间: 2013-8-30 23:28
标题: 反射怎么和具体的类对象联系起来
本帖最后由 328078121 于 2013-8-31 19:27 编辑

public class ReflectTest2 {
        public static void main(String[] args) throws Exception{
                // TODO Auto-generated method stub
                InputStream ips = new FileInputStream("config.properties");
                //将配置文件读取到流中
                Properties props = new Properties();
                props.load(ips);//将流中的配置文件加载进来
                ips.close();
                String className = props.getProperty("className");
                Collection collections =
                        (Collection) Class.forName(className).newInstance();
                //这里是怎么和ReflectPoint类的对象联系起来的?
                ReflectPoint rpt1 = new ReflectPoint(4,5);
                ReflectPoint rpt2 = new ReflectPoint(7,2);
                ReflectPoint rpt3 = new ReflectPoint(4,5);
                collections.add(rpt1);
                collections.add(rpt2);
                collections.add(rpt3);
                collections.add(rpt1);
                System.out.println(collections.size());
        }
}
作者: 老衲玩IT    时间: 2013-8-31 00:06
这是用反射的方法建立Collection对象,Collection是java已定义的集合类,集合类可以添加任何类对象作为元素,ReflectPoint对象也不例外,Collection对象添加pt1 pt2...作为元素并没有什么可争议的地方,楼主提的问题不科学。
作者: ★忙碌★    时间: 2013-8-31 08:06
Collection collections =  (Collection) Class.forName(className).newInstance();
这句话是获取collections的实例,接着就可用它的add方法了,add可以添加任何类型的元素!

作者: xiangzi2008006    时间: 2013-8-31 09:55
Collection collections =  (Collection) Class.forName(className).newInstance();不是已经定义了一个代理类了吗?这个代理类其实代理的就是Collection接口的所有方法,通过代理类能够调用代理接口的所有方法。于是执行add方法添加ReflectPoint对象。
如果invoke抽象方法的实现没有做任何处理,你得到的返回结果只能是null,以及无法保存添加到代理类中的对象而已。

作者: 薛鹏鹏    时间: 2013-8-31 14:17
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2