我有一个方法fetchObjects(String),期望返回一个Contract业务对象数组.该className参数告诉我应该返回什么样的业务对象(当然这在这个解释的情况下没有意义,因为我已经说过我将返回Contracts,但它基本上是我在真实场景中的情况).所以我从某处获取了一组条目并加载了集合条目的类(其类型由其指定className).
现在我需要构造要返回的数组,所以我使用Set的toArray(T[])方法.使用反射,我构建了一个空的Contracts数组.但是,这给了我一个静态类型的值Object!接下来我需要将它转换为适当的类型,在本例中是Contract[](参见下面列表中的"带星号 - 下划线"部分).
我的问题是:有没有一种方法,以及如何Contract[]在列表中进行转换,但Contract仅通过className(或entriesType)确定数组元素的类型()?换句话说,我想要做的就是基本上像这样::(entriesType[]) valueWithStaticTypeObject,其中entriesType被通过classname参数指定的类替换,即Contract.
这在某种程度上是不可能的,或者它可以以某种方式完成吗?也许使用泛型?
package xx.testcode;
import java.util.HashSet;
import java.util.Set;
class TypedArrayReflection {
public static void main(String[] args) {
try {
Contract[] contracts = fetchObjects("Contract");
System.out.println(contracts.length);
} catch (ClassNotFoundException e) {}
}
static Contract[] fetchObjects(String className) throws ClassNotFoundException {
Class<?> …Run Code Online (Sandbox Code Playgroud)