通过属性文件的形式配置所需要的子类
首先创建一个fruit.properties的资源文件
内容为:
apple=Reflect.Apple
orange=Reflect.Orange
然后编写主类代码
虽然只是测试代码,但是里面的文件流并没有正确的关闭,
不知道观众的你是否发现啦,我也是回头再看这个的时候才发现的,或者说是我在知道
如何正确的关闭文件流之后,再看这个就看到了问题啦。
具体的就看下面这个文章
链接如下: Java如何正确的使用try catch finally关闭文件流的总结
首先创建一个fruit.properties的资源文件
内容为:
apple=Reflect.Apple
orange=Reflect.Orange
然后编写主类代码
//细节:命名规则:类,接口名称都得大写;
// 写完代码记得格式化,就算是测试代码,贴出来也是给人看的。不能太水。
interface Fruit {
void eat();
}
class Apple implements Fruit {
public void eat() {
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat() {
System.out.println("Orange");
}
}
//操作属性文件类
class Init {
public static Properties getPro() throws IOException {
Properties pro = new Properties();
File f = new File("fruit.properties");
if (f.exists()) {
pro.load(new FileInputStream(f));
} else {
pro.setProperty("apple", "Reflect.Apple");
pro.setProperty("orange", "Reflect.Orange");
pro.store(new FileOutputStream(f), "FRUIT CLASS");
}
return pro;
}
}
class Factory {
public static Fruit getInstance(String className) {
Fruit f = null;
try {
f = (Fruit) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Hello {
public static void main(String[] a) throws IOException {
Properties pro = Init.getPro();
Fruit f = Factory.getInstance(pro.getProperty("apple"));
if (f != null) {
f.eat();
}
}
}
【运行结果】:Apple
这里就可以解释以前看到.properties这种配置文件是干嘛的啦,
估计大概就是这么用的,读取文件配置,然后就可以修改配置文件的方式来简单轻松的完成一些任务,连接数据的配置也是这样的咯,大概有个印象,若要详细了解,还得查一番才行。
mongo.properties
memcached.properties
map.properties
default_setting.properties
quartz.properties
在我的这个项目里面就看到这么几个properties类型的文件,原来这些就是存了一些系统配置啊。
原来如此。
Apple apple = (Apple) f;
咳咳,这个是不行的,人能不强转成男人,至于为啥就自己猜吧。
编译时没错,运行时就炸了,这个也是多态的一个常问的问题。就不赘述啦
上面的代码里面有个问题。虽然只是测试代码,但是里面的文件流并没有正确的关闭,
不知道观众的你是否发现啦,我也是回头再看这个的时候才发现的,或者说是我在知道
如何正确的关闭文件流之后,再看这个就看到了问题啦。
具体的就看下面这个文章
链接如下: Java如何正确的使用try catch finally关闭文件流的总结