JAVA 反射机制(Java Reflection)总结(二)
2017-08-26 17:50
615 查看
利用反射机制,读取配置文件中的相关信息,执行相应的方法
1、新建一个接口
package com.liu.bao; public interface Flower { void function(); void value(); }
2、创建两个实现类
package com.liu.bao; import java.util.Date; public class Jasmine implements Flower{ private double price; private String colour; private Date date; private char discount=1; private int count=1;//默认值为1 @Override public void function() { System.out.println("茉莉花香,雅致清幽"); } @Override public void value() { System.out.println("茉莉花香八折:"+price*count*0.8); } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getColour() { return colour; } public void setColour(String colour) { this.colour = colour; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public char getDiscount() { return discount; } public void setDiscount(char discount) { this.discount = discount; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
package com.liu.bao; import java.util.Date; public class Rose implements Flower{ private double price; private String colour; private Date date; private char discount=1; private int count=1;//默认值为1 @Override public void function() { System.out.println("七夕之夜,玫瑰之约"); } @Override public void value() { System.out.println("玫瑰之约:"+price*count*0.8); } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getColour() { return colour; } public void setColour(String colour) { this.colour = colour; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public char getDiscount() { return discount; } public void setDiscount(char discount) { this.discount = discount; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
3、新建一个配置文件
className=com.liu.bao.Rose attName=price/colour/discount attValue=10/white/0 method=value
4、测试类
package com.liu.bao; import java.io.FileInputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; public class TestReflect { @SuppressWarnings("unchecked") public static void main(String[] args) throws Exception { Properties prop = new Properties(); pr abe4 op.load(new FileInputStream("config.properties")); // 读取配置文件 Class<Flower> clz = (Class<Flower>) Class.forName(prop.getProperty("className")); // 通过反射,获取类,根据配置文件的要求 Flower s = clz.newInstance(); // 创建一个实例,此处用多态 String[] attNames = prop.getProperty("attName").split("/");// 读取配置文件中的属性名 String[] attValues = prop.getProperty("attValue").split("/");// 读取配置文件中的属性值 for (int i = 0; i < attNames.length; i++) { String methodName = "set" + attNames[i].substring(0, 1).toUpperCase() + attNames[i].substring(1); //拼接SET方法名 Field f = clz.getDeclaredField(attNames[i]); //获取相应字段 Method m = clz.getMethod(methodName,f.getType()); // 获取SET方法(参数类型与字段类型相同) if (f.getType()==double.class || f.getType().equals(Double.class)) { m.invoke(s, Double.parseDouble(attValues[i])); // 执行SET方法,将属性注入s实例中。此处需要将配置文件中的属性值转为对应的参数类型 } else if (f.getType().equals(Date.class)) { m.invoke(s, new SimpleDateFormat("yyy-MM-dd").parse(attValues[i])); } else if(f.getType()==char.class || f.getType().equals(Character.class)){ m.invoke(s, attValues[i].toCharArray()[0]); } else if(f.getType()==int.class || f.getType().equals(Integer.class)){ m.invoke(s,Integer.parseInt(attValues[i])); } else { m.invoke(s, attValues[i]); } } Method method = clz.getMethod((String) prop.get("method"),null); //获取配置文件中指定的方法 method.invoke(s, null); //执行配置文件中指定的方法 } }
相关文章推荐
- 黑马程序员_Java基础:反射机制(Reflection)总结
- JAVA 反射机制(Java Reflection)总结(一)
- 黑马程序员_Java基础:反射机制(Reflection)总结
- Java进阶之reflection(反射机制)——反射概念与基础
- Java自学之路-Java基础教程-48:Java的反射机制Reflection
- Java中反射机制(Reflection)学习
- Java的反射机制(Reflection)
- Java 反射机制总结
- java 中反射机制的总结
- 吃透Java的反射机制——基础知识总结
- Java进阶之reflection(反射机制)——反射概念与基础
- java 中反射机制的总结
- Java学习之反射机制学习总结--1
- DAY20--java中的反射机制常用知识点总结
- 总结java中的反射机制
- Java基础系列:(3)反射机制的简单总结
- JAVA的内省机制(introspector)与反射机制(reflection)
- java笔记--反射机制之基础总结与详解
- JAVA的内省机制(introspector)与反射机制(reflection)
- Java 反射机制简单总结