从传递的类参数返回对象

时间:2014-07-25 13:47:36

标签: java generics

在我的程序中,我有一个抽象类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中不可能吗?

2 个答案:

答案 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);
}