java:反射(Class.forName()读取配置文件举例)

本文介绍了一种利用Java反射机制结合配置文件实现多态性的方法。通过读取config.properties文件中的类名,动态创建并实例化指定的Fruit类(如Apple或Orange),然后通过Juicer类的方法榨汁,展示了反射机制的强大灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

config.properties配置文件:

 

调用代码:

package com.heima.bean;

import java.io.BufferedReader;
import java.io.FileReader;

public class Demo2_Reflect {

	public static void main(String[] args) throws Exception {
//		没有反射,只有多态
//		Juicer j=new Juicer();
//		j.run(new Apple());//		Fruit f=new Apple();
//		j.run(new Orange());

//		有反射,配置文件
		BufferedReader br=new BufferedReader(new FileReader("config.properties"));
		Class clazz=Class.forName(br.readLine());
		Fruit f=(Fruit)clazz.newInstance();//父类引用指向子类对象,成员方法,编译看左边,运行看右边
		Juicer j=new Juicer();
		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();
	}
}

输出结果:

好的,我可以为您提供这个问题的解答。 首先,您需要创建一个接口 Common.java,其中定义了一个方法 computeTime 用于计算交通工具运行1000公里所需的时间。然后,您需要创建两个 Plane.java 和 Car007.java,并实现 Common 接口,并重写其中的 computeTime 方法,分别根据每种交通工具的速度公式进行计算。 接着,您需要创建一个 ComputeTime.java,该用于从命令行读取参数,并根据交通工具型动态创建对应的交通工具对象,并调用 computeTime 方法计算所需时间。 最后,您只需要在未来增加新的交通工具时,创建一个新的并实现 Common 接口,并重写其中的 computeTime 方法即可,不需要修改以前的任何程序。 以下为该程序的示例代码: Common.java ```java public interface Common { double computeTime(int A, int B, int C); } ``` Plane.java ```java public class Plane implements Common { public double computeTime(int A, int B, int C) { return 1000.0 / (A + B + C); } } ``` Car007.java ```java public class Car007 implements Common { public double computeTime(int A, int B, int C) { return 1000.0 / (A * B / C); } } ``` ComputeTime.java ```java public class ComputeTime { public static void main(String[] args) { if (args.length < 4) { System.out.println("Usage: java ComputeTime <vehicle_type> <A> <B> <C>"); System.exit(1); } String vehicleType = args[0]; int A = Integer.parseInt(args[1]); int B = Integer.parseInt(args[2]); int C = Integer.parseInt(args[3]); try { Common vehicle = (Common) Class.forName(vehicleType).newInstance(); double time = vehicle.computeTime(A, B, C); System.out.println("The time required for " + vehicleType + " to run 1000 km is " + time + " hours."); } catch (Exception e) { System.out.println("Invalid vehicle type: " + vehicleType); System.exit(1); } } } ``` 当您需要编译该程序时,可以在命令行中使用以下命令: ``` javac Common.java Plane.java Car007.java ComputeTime.java ``` 编译成功后,您可以使用以下命令运行程序: ``` java ComputeTime Plane 20 30 40 java ComputeTime Car007 23 34 45 java ComputeTime Ship 22 33 44 ``` 其中,第一个参数是交通工具的型,第二、第三、第四个参数分别是整数 A、B、C。如果增加第三种交通工具 Ship,则只需要创建 Ship.java 并实现 Common 接口即可,不必修改其他程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值