[CareerCup] 14.5 Object Reflection 物件反射

Grandyang發表於2015-11-17

 

14.5 Explain what object reflection is in Java and why it is useful.

 

Java中的物件反射機制可以獲得Java類和物件的反射資訊,並可採取如下操作:

1. 在執行階段獲得類內部的方法和欄位資訊

2. 新建類的例項

3.通過獲取欄位引用來獲得和捨棄物件欄位,無論該欄位是私有還是公有的。

 

下列程式碼是物件反射的一個例子:

// Parameters
Object[] doubleArgs = new Object[] {4.2, 3.9};
// Get class
Class rectangleDefinition = Class.forNmae("MyProj.Rectangle");
// Equivalent: Rectange = new Rectangle(4.2, 3.9);
Class[] doubleArgsClass = new Class[] {double.class, double.class};
Constructor doubleArgsConstructor = rectangleDefinition.getConstructor(doubleArgsClass);
Rectangle rectangle = (Rectangle) doubleArgsConstructor.newInstance(doubleArgs);
// Equivalent: Double area = rectangle.area();
Method m = rectangleDefinition.getDeclaredMethod("area");
Double area = (Double) m.invoke(rectangle);

// This code does the equivalent of 
Rectangle rectangle = new Rectange(4.2, 3.9);
Double area = rectangle.area();

 

物件反射為什麼有用?

1. 觀測和操控應用執行時的行為

2. 幫助除錯和測試程式,通過直接接觸到方法,建構函式和欄位

3. 我們可以呼叫方法即便我們事先不知道該方法。比如,我們可以讓使用者傳入類名稱,構建函式的引數,和方法名稱。我們利用這些資訊區建立一個物件並呼叫一個方法。

 

想了解更多關於Java反射機制的內容,可以參見Java 反射機制學習資料

相關文章