2012-05-07 101 views
0

如何從超類方法獲取對子類的引用?從超類獲取子類的類引用

例如,

public class MySuper { 
    public void myMethod(){ 
    // here i need a reference to MySub1.class or MySub2.class 
    // depending on the class of the instance that invoked this method 
    } 
} 

public class MySub1 extends MySuper { 
    public String myString; 
} 
public class MySub2 extends MySuper { 
    public int myInt; 
} 
+0

對象是否已經初始化,或者我們需要初始化對象,當我們收到參數時。 –

回答

3

聽起來像是你只是想:

Class<?> clazz = getClass(); 

或者更明確:

Class<?> clazz = this.getClass(); 

注意,它不會包含代碼類調用方法 - 它將是對象的類該方法在上被調用。如果你想要調用者的類,那是完全不同的問題。

+0

謝謝。比方說,我需要遍歷子類的字段(並從JSON或XML或其他東西中填充它們)...我可以在mySub1實例上使用myString上的反射,mySub2上使用MyInt上的反射? – momo

+0

@BigMoMo:是的。儘管我個人可能會在'MySuper'中編寫一個虛擬方法來執行序列化,並使子類覆蓋它以添加其額外字段。我喜歡手動進行序列化,除非你使用完全*自動生成的類(例如Protocol Buffers)。你的旅費可能會改變。 –

+0

謝謝,這就是我所需要的。 super有一個通用的序列化器,它只抓取原語,被具有非原始序列化的子類重寫。 – momo

0
MySub1 sub1 = new MySub1(); 
sub1.getClass(); // returns the MySub1. 
sub1.getClass().getSuperclass(); // returns MySuper 

我希望這是你所需要的。

+0

我想他想要超類的這個...子類的相反 – raddykrish