JAva反射---私の見解
最近1つのプロジェクトをしていて、最初から反射を使うつもりはありませんでしたが、やっていて、同じコードがたくさんあることに気づきました!うっとうしい感じがして、まだ実行時に定義するタイプがたくさんあるので、反射を思わず思い出して、最初は少しだけ使って、それから反射コードを使うのが少なくて、循環が多くなったことに気づきました!多くの地方は1つのタイプを书く必要はありませんて、反射を使ってソースのオブジェクトを得ることができて、すればするほど良い感じがして、甚だしきに至ってはオブジェクトのカプセル化さえapacheのBeanUtilsを放弃して、自分で1つのカプセル化の方法を书いて、性能と优位はすべて他の人の强さに足りないかもしれませんが、爆発は少なくとも私はコントロールすることができます!これはフレームワークではできません!だから私は、優秀なプログラマーとして、反射を理解する必要があります.反射を使うことができます.もしアーキテクチャ師として、反射に精通する必要があります.反射があれば、コードをより少なくすることができ、コードの多重性をより高くし、メンテナンスを容易にすることができます.また、モジュールとモジュールの結合を低減し、低結合高集約をさらに実現します.
反射を利用して1つのエンティティをカプセル化して、このようにmapの中でどれだけの要素を入れても完全にエンティティの中にカプセル化することができて、他の方法では実現しにくいです!
public class DemoBean {
private String name;
private String engName;
private int age;
private String dept;
private String address;
private String phone;
private String info;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEngName() {
return engName;
}
public void setEngName(String engName) {
this.engName = engName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) throws SecurityException,
NoSuchFieldException, NoSuchMethodException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
DemoBean2 db = new DemoBean2();
merge(db, getMap());
System.out.println(db.getAge());
System.out.println(db.getEngName());
System.out.println(db.getDept());
System.out.println(db.getInfo());
System.out.println(db.getAddress());
System.out.println(db.getPhone());
}
public static void merge(Object bean, Map<String, Object> map)
throws SecurityException, NoSuchFieldException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String fieldName = it.next();
Field f = bean.getClass().getDeclaredField(fieldName);
String methodName = fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method m = bean.getClass().getDeclaredMethod("set" + methodName,
f.getType());
m.invoke(bean, map.get(fieldName));
}
}
public static Map<String, Object> getMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("engName", "vincent");
map.put("age", 12);
map.put("dept", "Boss");
map.put("address", " ");
map.put("phone", "12450358357");
map.put("info", "this is infomation");
return map;
}
}
反射を利用して1つのエンティティをカプセル化して、このようにmapの中でどれだけの要素を入れても完全にエンティティの中にカプセル化することができて、他の方法では実現しにくいです!