Java基础:反射的简单案例

最近在学Java基础,记录一下学习内容,本案例来源尚硅谷,题目要求如下:

实现榨汁机榨水果汁,水果分别有苹果(Apple)、香蕉(Banana)、桔子(Orange)等。

1. 声明(Fruit)水果接口,包含榨汁抽象方法:void squeeze();

2. 声明榨汁机(Juicer),包含运行方法:public void run(Fruit f),方法体中,调用f的榨汁方法;

3. 声明各种水果类,实现水果接口,并重写squeez();

4. 在src下,建立配置文件:config.properties,并在配置文件中配上fruitName=xxx(其中xxx为某种水果的全类名);

5. 在FruitTest测试类中,

(1) 读取配置文件,获取水果类名,并用反射创建水果对象,

(2) 创建榨汁机对象,并调用run()方法。

题目要求是蛮基础的,但是涉及了IO流、properties和反射,感觉有点意思,记录一下。

1-3的代码很简单,就是造类,不多赘述。

在4里面我犯了一个错误,对于配置文件的书写不熟悉,fruitName=xxx这段的xxx外边加了双引号。

5的代码如下:

public class FruitTest{
    @Test
    public void test() throws Exception {
        //1. 读取配置文件中的信息,获取全类名
        FileInputStream fis = new FileInputStream(new File("src/config.properties"));

        Properties pros = new Properties();
        pros.load(fis);
        String fruitName = pros.getProperty("fruitName");
        //2. 通过反射,创建指定全类名对应的实例
        Class clazz = Class.forName(fruitName);//获取class类的实例,即加载到内存中的某个类
        Constructor cons = clazz.getDeclaredConstructor();
        cons.setAccessible(true);
        Fruit o = (Fruit) cons.newInstance();//调用构造器造对象
        //3. 通过榨汁机的对象调用run()
        Juicer juicer = new Juicer();
        juicer.run(o);
    }
}

自己在写的时候还遇到一些问题:

1. 首先还是对配置文件不熟悉,对properties类的方法不熟,在确定Class.forname()方法的参数时,没有想到使用properties的getProperties()方法;

2. 这段代码的健壮性不是很强,应该是可以使用泛型优化的,但是我泛型太久没用又忘了(悲)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值