Я нахожусь в ситуации, когда кажется, что мне нужно иметь возможность преобразовать Объект, который является массивом какого-то другого, не примитивного типа, в его конкретный тип массива, чтобы перейти к универсальному.
То же самое тривиально для работы с типами, не относящимися к массивам: desiredType.cast(o)
дает объект правильного типа.
Кто-нибудь будет так любезно объяснить, как это сделать с массивами,ИЛИ почему это никогда не сработает?
Демонстрация того, что я пытаюсь сделать:
import java.lang.reflect.Array;
import java.util.Arrays;
public class Main
{
public static <T> void testT(T o)
{
System.out.println("testT called with " + o + " (" + o.getClass() + ")");
}
public static void test(Object o)
{
testT(o.getClass().cast(o));
}
public static void main(String[] args) throws ClassNotFoundException
{
test(new Integer(5));
Class<?> type = Class.forName("java.lang.Integer");
Object array = Array.newInstance(type, 2);
Class<?> arrayType = array.getClass();
Object[] copy = Arrays.copyOf(arrayType.cast(array), Array.getLength(array)); // NOPE. (casting is optional)
System.out.println(copy);
}
}