2012-06-12 33 views
0
class A<Type>{ 

    private Type id; 

} 

class B extends A<String>{ 


} 

B b = new B(); 
Field idField = //reflection code to get id field 

如何從「idField」獲得idField的確切類型,意味着String而不是Type?獲取Java類中的通用字段的類型

+0

什麼是這樣做的目的是什麼?我看不到任何可能的用途。在給出的例子中,顯然這個類型是String,因爲類是這樣定義的,並且不會改變。 – tcooc

+2

我不明白這是另一個問題的完全重複。在這種特定情況下,類型在運行時可用。 –

+0

真正的重複是在這裏:[檢查字段類型是一樣的在Java泛型類型(http://stackoverflow.com/q/2758582/697449) –

回答

1

我不能完全確定你想要達到的目的。 但我猜你想確定字段'id'的具體類型。

public class A<T>{ 
    public T id; 
    public Class<T> idType; 

    public A(){ 
     idType = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
    } 
} 

public class B extends A<String>{ 

} 

public static void main(String[] args) throws Exception { 
    B b = new B(); 
    System.out.println(b.idType); 
} 

上述代碼片段中的最後一個sysout語句將打印'java.lang.String'。

這是在基類中編寫通用的功能時,這是非常常用的技術。