運用JavaBean 的最常見的問題是:根據指定的類名,類字段名和所對應的數據,得到該類的實例,下面的壹個例子演示了這壹實現。
-|Base.java //抽象基類
|Son1.java //基類擴展1
|Son2.java //基類擴展2
|Util.java
/**
* @author metaphy
* create 2005-4-14 9:06:56
* 說明:
*/
(1)Base.java 抽象基類只是壹個定義
public abstract class Base {
}
(2)Son1.java /Son2.java 是已經實現的JavaBean
public class Son1 extends Base{
private int id ;
private String name ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void son1Method(String s){
System.out.println(s) ;
}
}
(3)
public class Son2 extends Base{
private int id;
private double salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
(4)Util.java 演示了如何根據指定的類名,類字段名和所對應的數據,得到壹個類的實例
import java.lang.reflect.Method;
public class Util {
//此方法的最大好處是沒有類名Son1,Son2 可以通過參數來指定,程序裏面根本不用出現
public static Base convertStr2ServiceBean(String beanName,String fieldSetter,String paraValue){
Base base = null ;
try {
Class cls = Class.forName(beanName) ;
base = (Base)cls.newInstance() ;
Class[] paraTypes = new Class[]{String.class };
Method method = cls.getMethod(fieldSetter, paraTypes) ;
String[] paraValues = new String[]{paraValue} ;
method.invoke(base, paraValues) ;
} catch (Throwable e) {
System.err.println(e);
}
return base ;
}
public static void main(String[] args){
Son1 son1 =(Son1) Util.convertStr2ServiceBean("trying.reflect.Son1","setName","wang da sha");
System.out.println("son1.getName() :"+son1.getName()) ;
}
}
//調用結果:
//son1.getName() :wang da sha