如何编写java函数来返回动态类型的数组?
我有一种情况,我想得到一个对象的数组,不管该对象是什么类型的 以下是我尝试过的: 调用函数的代码:如何编写java函数来返回动态类型的数组?,java,arrays,generics,Java,Arrays,Generics,我有一种情况,我想得到一个对象的数组,不管该对象是什么类型的 以下是我尝试过的: 调用函数的代码: wsDeployedExaminersResponseVO.setDeployedExaminers((DeployedExaminersVO[]) returnArrayForType(wsDeployedExaminersVO)); public static Object[] returnArrayForType(Object type) throws Exception { Ob
wsDeployedExaminersResponseVO.setDeployedExaminers((DeployedExaminersVO[]) returnArrayForType(wsDeployedExaminersVO));
public static Object[] returnArrayForType(Object type) throws Exception {
Object[] objects={type};
return objects;
}
功能代码:
wsDeployedExaminersResponseVO.setDeployedExaminers((DeployedExaminersVO[]) returnArrayForType(wsDeployedExaminersVO));
public static Object[] returnArrayForType(Object type) throws Exception {
Object[] objects={type};
return objects;
}
但是当我运行代码时,我在调用代码的地方得到了casting异常。我这样做的原因是因为我正在尝试自动生成java代码,并且我需要一个函数,该函数将返回参数类型的数组,或者一个一行代码,该代码可以在运行时根据类型动态地适应set函数 根据,您可以使用泛型来解决它。我希望下面的代码有帮助
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;
}
publicstaticvoidmain(字符串[]args)引发异常{
整数[]a=genericMethod(Integer.class,5);
String[]b=genericMethod(String.class,“dddddddd”);
}
公共静态T[]genericMethod(类clazz,T输入){
@抑制警告(“未选中”)
T[]res=(T[])Array.newInstance(clazz,1);
res[0]=输入;
返回res;
}
两个问题:
@SuppressWarnings("unchecked")
public static <T> T[] getArray(T value) {
Object array = Array.newInstance(value.getClass(), 1);
Array.set(array, 0, value);
return (T[]) array;
}
@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;
}
@SuppressWarnings(“未选中”)
公共静态T[]getArray(T值){
对象数组=array.newInstance(value.getClass(),1);
数组.set(数组,0,值);
返回(T[])数组;
}
2、对于多个对象
@SuppressWarnings("unchecked")
public static <T> T[] getArray(T... value) {
return value;
}
@SuppressWarnings(“未选中”)
公共静态T[]getArray(T…值){
返回值;
}
3、对于显式类型
3.1例如
@SuppressWarnings("unchecked")
public static <T> T[] getArray(T value) {
Object array = Array.newInstance(value.getClass(), 1);
Array.set(array, 0, value);
return (T[]) array;
}
@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;
}
@SuppressWarnings(“未选中”)
公共静态T[]getArray(类clz,对象值){
objectarray=array.newInstance(clz,1);
数组.set(数组,0,值);
返回(T[])数组;
}
3.2对于多个实例
@SuppressWarnings("unchecked")
public static <T> T[] getArray(Class<T> clz, Object... values) {
Object array = Array.newInstance(clz, values.length);
System.arraycopy(values, 0, clz, 0, values.length);
return (T[]) array;
}
@SuppressWarnings(“未选中”)
公共静态T[]getArray(类clz,对象…值){
objectarray=array.newInstance(clz,values.length);
数组复制(值,0,clz,0,值,长度);
返回(T[])数组;
}
但请注意,第二种方式的类型由编译器推断。例如:getArray(“1”,1)
将返回Serializable[]
。您可以添加异常吗?