3 回答

TA貢獻1788條經驗 獲得超4個贊
感謝您幫助檢查有效性(它有效?。┑胰匀粵]有得到這個 newInstance 創建,因為我必須從 .csv 文件中讀取數據,而我的派生類實際上是原始類型(如 int、float 等)的“包裝器” . 我應該使用方法 getInstance() 和 create(string s) 創建新對象,所以它看起來像這樣:
public static class Derived1 extends Base { //Integer wrapper
Integer value;
public Derived1(Integer value) {
this.value = value;
}
private static Integer integer = new Integer();
public static Integer getInstance(){
return integer;
}
private Integer(){};
public Base create(String s) {
value = java.lang.Integer.parseInt(s);
return this;
}
}
而且我不知道如何使用 Class 轉換為適當的類型。

TA貢獻1887條經驗 獲得超5個贊
如果我正確閱讀了這個問題,那么您想創建一些派生類的實例,它們都具有相同的構造函數參數。如果是這種情況,那么您需要為每個派生類提供相同的構造函數(它不需要在基類中)并使用 Constructor.newInstance(parameters) 創建實例。此外,由于您要確保每個派生類擴展基類,因此您將需要使用 Class.isAssignableFrom(class)。例如,
import java.lang.reflect.Constructor;
public class SO52930530 {
public abstract static class Base {
public abstract <T> T getValue();
}
public static class Derived1 extends Base {
String value;
public Derived1(String value) {
this.value = value;
}
public <T> T getValue() {
return (T) value;
}
}
public static class Derived2 extends Base {
Integer value;
public Derived2(String value) {
this.value = new Integer(value);
}
public <T> T getValue() {
return (T) value;
}
}
public static void main(String... args) throws Exception {
Class<? extends Base>[] extensions = new Class[]{Derived1.class, Derived2.class};
String[] values = new String[]{"a", "1"};
Base[] instances = new Base[values.length];
for (int i = 0; i < instances.length; i++) {
Class extension = extensions[i];
if (Base.class.isAssignableFrom(extension)) {
Constructor constructor = extension.getConstructor(String.class);
instances[i] = (Base) constructor.newInstance(values[i]);
}
}
for (int i = 0; i < instances.length; i++) {
System.out.printf("%d %s %s\n", i, instances[i].getClass(), instances[i].getValue());
}
}
}
我希望這有幫助。
添加回答
舉報