2014-09-25 126 views
0

鑑於獲取字段實例,例如,一類是這樣的:從抽象類

public abstract class AbstractSomething { 

    public static volatile SingularAttribute<Somefield, AnotherField> myAttribute; 
} 

如何通過反射得到myAttribute一個實例。 AbstractSomething沒有實施課程。


編輯

不,我們需要SingularAttribute<T, S>的一個實例。我們需要使用反射的原因是因爲這些類會生成並作爲Class對象傳入我們的方法。我們無法知道我們正在接收哪個AbstractSomething。他們中有不少人。


EDIT 2

發現了什麼問題了。當應用程序中存在Hibernate上下文時,抽象類上的接口在訪問它們時被其實現對象取代。

+0

我不明白。你是否希望'AbstractSomething'類的'myAttribute'字段的'Field'實例? – 2014-09-25 14:42:20

+0

爲什麼你需要通過反射來獲得它?你有什麼信息?你試過了什麼,發生了什麼?我們需要更多信息。 – 2014-09-25 14:44:17

+0

這是一個'static'字段,沒有多少'myAttribute',只有一個。 – 2014-09-25 14:48:00

回答

1

沒什麼大不了的,其實,你可以做這樣的事情:

Field field = AbstractSomething.class.getField("myAttribute") 

然後你就可以通過調用field.get(null)field.set(null, value)

訪問它真正的問題是,爲什麼要使用反射,但我想你有你的理由。

編輯:

如果你在之前的手一個類實例(可以稱之爲Children子),那麼你可以做

Field field = classInstance.getField("myAttribute") 

來獲取reificates你正在尋找的字段的字段...如果你想所有的領域只是調用getFields方法。

爲了訪問靜態字段,您並不真的需要一個具體的實現,也不需要一個有問題的有效類。

+0

請看我的編輯 – 2014-09-25 14:47:53

+0

所以你不知道「AbstractSomething」,但你有一個類的實例...你不能只是做classInstance.getField(「myAttribute」)然後? – Claudio 2014-09-25 14:52:04

0

不需要反射。本場屬於的類,並且不管有多少子類有,只有一個AbstractSomething類的實例,所以才:

SingularAttribute<Somefield, AnotherField> attr = AbstractSomething.myAttribute; 
+0

他們不會在編譯時似乎無法訪問'AbstractSomething'類型。 – 2014-09-25 15:44:19

+0

@SotiriosDelimanolis - 確實:( – 2014-09-25 16:49:20

+0

好吧,你知道什麼?該字段的名稱?方式?修飾符(靜態,受保護等)?還有別的嗎? – Bohemian 2014-09-25 22:57:08