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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiangshicun007 中级黑马   /  2015-12-2 14:56  /  3874 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
package com.heima.reflect;
public class Demo2_Reflect {
        /**
         * * 榨汁机(Juicer)榨汁的案例
         * 分别有水果(Fruit)苹果(Apple)香蕉(Banana)桔子(Orange)榨汁(squeeze)
         * @throws IOException
         */
        public static void main(String[] args) throws Exception {
                Juicer j = new Juicer();                                                                        //创建榨汁机               
                BufferedReader br = new BufferedReader(new FileReader("config.properties"));
                Class clazz = Class.forName(br.readLine());                                        //获取该类的字节码文件
                Fruit f = (Fruit) clazz.newInstance();                                                //创建实例对象
                j.run(f);
        }
}
interface Fruit {
        public void squeeze();
}
class Apple implements Fruit {
        public void squeeze() {
                System.out.println("榨出一杯苹果汁儿");
        }
}

class Orange implements Fruit {
        public void squeeze() {
                System.out.println("榨出一杯橘子汁儿");
        }
}

class Juicer {

        public void run(Fruit f) {
                f.squeeze();
        }
}
这是老师讲分反射读取配置文件的例子
这个方法当我们把配置文件里的值输入为 com.heima.reflect.Apple时,输出榨出一杯苹果值,可是我如果想榨西瓜汁呢?梨子汁呢?想榨任意水果汁该怎能弄,而这个例子只能榨两种水果汁,所以觉得这个例子很鸡肋,求高手指点!

6 个回复

倒序浏览
楼主,你可以在配置文件里配置西瓜汁梨子汁的包名.类名!根据需求使用西瓜或者梨子,也可以用for循环遍历出来
回复 使用道具 举报
许鹏飞 发表于 2015-12-2 18:10
楼主,你可以在配置文件里配置西瓜汁梨子汁的包名.类名!根据需求使用西瓜或者梨子,也可以用for循环遍历出来 ...

把代码搞出来,嘛!
回复 使用道具 举报
不太明白  帮顶贴~
回复 使用道具 举报
利用Properties集合的load方法加载配置文件的键值对进集合,然后迭代键的Set集合,取出值
回复 使用道具 举报
我觉得这个例子已经用了多态这个特性了,我们要实现自己的功能,是需要自己写的,比如西瓜汁,梨子汁,用多态比不用多态可以省好多代码
回复 使用道具 举报
class Watermelon implements Fruit {
        public void squeeze() {
                System.out.println("榨出一杯西瓜汁儿");
        }
}

只需要在配置文件中将Apple换为  Watermelon即可
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马