我有一种情况,我希望得到一个对象的数组,无论对象是什么类型。
以下是我试过的:调用函数的代码:
wsDeployedExaminersResponseVO.setDeployedExaminers((DeployedExaminersVO[]) returnArrayForType(wsDeployedExaminersVO));
功能代码:
public static Object[] returnArrayForType(Object type) throws Exception {
Object[] objects={type};
return objects;
}
但是当我运行代码时,我会在调用代码时抛出异常。我这样做的原因是因为我正在尝试自动生成java代码,我需要一个函数,它将返回参数类型的数组或一个代码函数,它可以动态地适应set函数运行时的类型。
答案 0 :(得分:4)
根据this,您可以使用泛型来解决它。我希望以下代码有所帮助。
public static void main(String[] args) throws Exception {
Integer[] a = genericMethod(Integer.class, 5);
String[] b = genericMethod(String.class, "dddddddddddd");
}
public static <T> T[] genericMethod(Class<T> clazz, T input) {
@SuppressWarnings("unchecked")
T[] res = (T[]) Array.newInstance(clazz, 1);
res[0] = input;
return res;
}
答案 1 :(得分:3)
两个问题:
解决方案
1,仅适用于1个实例
{"type": "evaluator", "index": 0}
2,对于多个对象
@SuppressWarnings("unchecked")
public static <T> T[] getArray(T value) {
Object array = Array.newInstance(value.getClass(), 1);
Array.set(array, 0, value);
return (T[]) array;
}
3,对于显式类型
3.1对于1个实例
@SuppressWarnings("unchecked")
public static <T> T[] getArray(T... value) {
return value;
}
3.2对于多个实例
@SuppressWarnings("unchecked")
public static <T> T[] getArray(Class<T> clz, Object value) {
Object array = Array.newInstance(clz, 1);
Array.set(array, 0, value);
return (T[]) array;
}