在我的程序中,我有一个抽象类A和其他一些从A扩展的类。这里有一些摘自我的代码:
public abstract class A {
public A(int[] values) {
// ...
}
}
public class B extends A {
public B(int[] values) {
super(values);
// setup other things
}
}
// some more classes like B
现在我有一个类从文件中读出一些整数值并将它们写入数组中。这个类只有静态方法,我想从传递的类返回一个对象。使用此代码,我可以将类B提供给方法,但是如何创建并返回类的对象,我已经调用了方法?我试过这个:
B obj = Reader.readFromFile(path, B.class);
public class Reader {
public static *** readFromFile(String path, Class<? extends A> c) {
// read out the file and store values in an array
// how can I create an object of the parameter c and return it from here?
}
}
我不想让全班通用。任何想法怎么做 这或在Java中不可能吗?
答案 0 :(得分:3)
您可以通过反射创建提供的类的实例。在你的情况下,你需要通过c.getConstructor(int[].class)获得一个合适的构造函数,然后创建该构造函数的新对象调用newInstance(...)方法
答案 1 :(得分:1)
另一种解决方案是在调用方法之前实例化对象,并将该实例传递给方法。然后,您可以使用setter传递值:
public static void readFromFile(String path, A c) {
c.setValues(...);
}
然后 B
应该提供一个无效的构造函数。
如果你真的需要在方法中实例化对象,你仍然可以使用反射:
public static void readFromFile(String path, Class<? extends A> c) {
int[] values = ...;
Constructor<T> constructor = c.getConstructor(int[].class);
T instance = constructor.newInstance(values);
}