使用反射類、Class類獲取指定的構造器並實例化對象


 1 package com.test;
 2 
 3 public class Car {
 4 
 5     private String brand;
 6     private String color;
 7     private int maxSpeed;
 8     
 9     public Car(){}
10 
11     public Car(String brand, String color, int maxSpeed) {
12         super();
13         this.brand = brand;
14         this.color = color;
15         this.maxSpeed = maxSpeed;
16     }
17     
18     public String getBrand() {
19         return brand;
20     }
21 
22     public void setBrand(String brand) {
23         this.brand = brand;
24     }
25 
26     public String getColor() {
27         return color;
28     }
29 
30     public void setColor(String color) {
31         this.color = color;
32     }
33 
34     public int getMaxSpeed() {
35         return maxSpeed;
36     }
37 
38     public void setMaxSpeed(int maxSpeed) {
39         this.maxSpeed = maxSpeed;
40     }
41 
42     @Override
43     public String toString() {
44         return "Car [brand=" + brand + ", color=" + color + ", maxSpeed="
45                 + maxSpeed + "]";
46     }
47 
48 }
 1 package com.test;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Method;
 5 public class ReflectTest {
 6 
 7     public static Car initByDefaultConst() throws Throwable{
 8         //通過類轉載器獲取Car類對象
 9         //ClassLoader loader = Thread.currentThread().getContextClassLoader();
10         //Class clazz = loader.loadClass("com.test.Car");
11         Class clazz = Class.forName("com.test.Car");
12         
13         //構造器器參數列表
14         Class[] cl = {String.class, String.class, int.class};
15         
16         //獲取默認的構造器
17         //Constructor cons = clazz.getDeclaredConstructor(null);
18         
19         //獲取指定的帶參數的構造器對象,並通過它實例化Car
20         Constructor cons = clazz.getDeclaredConstructor(cl);
21         //構造器參數
22         Object[] ps = {"紅旗H7", "黑色", 200};
23         //創建實例
24         Car car = (Car)cons.newInstance(ps);
25         
26         //通過反射方法設置屬性
27 /*        Method setBrand = clazz.getMethod("setBrand", String.class);
28         setBrand.invoke(car, "紅旗H7");
29         Method setColor = clazz.getMethod("setColor", String.class);
30         setColor.invoke(car, "黑色");
31         Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
32         setMaxSpeed.invoke(car, 200);*/
33         return car;
34     }
35     
36     public static void main(String[] args) throws Throwable {
37         Car car = initByDefaultConst();
38         System.out.println(car);
39     }
40 
41 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM