2014-02-05 87 views

回答

1

這僅僅是提供一些額外的信息,並回答在評論你的問題。鑑於你的問題中的信息,Kayaman的回答正是我所建議的。

但是,正如您暗示您的評論問題,此方法將只調用默認的構造函數。爲了調用其中一個參數化構造函數,您需要使用getDeclaredConstructor方法通過其簽名來有效「定位」它。

像這樣(從Kayaman的答案借用):

public abstract class AbstractClass { 
    public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) { 
     return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters); 
    } 
} 

確保課程,元素的parametersparameterTypes的順序對應的構造函數的簽名。

3

你可以用下面的方式實例化這個類,但也許你應該告訴我們你想要實現的。另一種更簡單的方法可能是實施Clonable

public abstract class AbstractClass { 
    public AbstractClass getInstance() { 
     return getClass().newInstance(); 
    } 
} 

或在構造函數中接受參數的情況下:

return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger); 
+0

如果抽象類有一個帶參數的構造函數呢?我可以通過他們與上述,因爲實施類肯定會做超(arg1,arg2) – user3236409

+0

更新構造函數... – Kayaman