A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 328078121 中级黑马   /  2013-8-30 23:28  /  1333 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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());
        }
}

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

4 个回复

倒序浏览
这是用反射的方法建立Collection对象,Collection是java已定义的集合类,集合类可以添加任何类对象作为元素,ReflectPoint对象也不例外,Collection对象添加pt1 pt2...作为元素并没有什么可争议的地方,楼主提的问题不科学。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
Collection collections =  (Collection) Class.forName(className).newInstance();
这句话是获取collections的实例,接着就可用它的add方法了,add可以添加任何类型的元素!
回复 使用道具 举报
Collection collections =  (Collection) Class.forName(className).newInstance();不是已经定义了一个代理类了吗?这个代理类其实代理的就是Collection接口的所有方法,通过代理类能够调用代理接口的所有方法。于是执行add方法添加ReflectPoint对象。
如果invoke抽象方法的实现没有做任何处理,你得到的返回结果只能是null,以及无法保存添加到代理类中的对象而已。
回复 使用道具 举报
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马