4 / 4 / 2
Регистрация: 24.05.2013
Сообщений: 300
1

Преобразование Object к Object[][]

20.09.2019, 02:20. Показов 1049. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется массив n-й глубины типа Object -> хотелось бы его скопировать. Сам массив скопируем - ОК, но для самих элементов массива просто скопируем ссылки.
Java
1
2
3
4
5
6
7
8
9
10
    public static Object deepCopy(Object arr) {
        if(arr == null || !arr.getClass().isArray())
            return arr;
 
        Object[] res = new Object[((Object[])arr).length];
        for(int i = 0; i < res.length; i++)
            res[i] = deepCopy(((Object[])arr)[i]);
 
        return res;
    }
Метод работает и действительно возвращает скопированный массив... (судя по отладчику) Но как преобразовать результат к Object[][] ? Переменной tmp как массивом могу пользоваться только в отладчике
Java
1
2
3
4
5
Integer[][] test1 = {{1,0},{0,1}};
String[][] test2 = {{"aa","bb"},{"abc","def"}};
 
Object tmp = deepCopy(test1); // OK
Object[][] tmp = (Object[][]) deepCopy(test1); // не пропускает -> java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [[Ljava.lang.Object;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2019, 02:20
Ответы с готовыми решениями:

Какая разница между Object a; и Object a=null;
Какая разница между Object a; и Object a=null;

Преобразование Object в generic-класс
Пишу очередь с приоритетом, с возможностью итерироваться по ней (интерфейс Iterable) и сравнивать...

Неявное преобразование int в Object
Скажите, что делает компилятор, если передать int там, где требуется Object? Участвует ли в этом...

Получение имени объекта. Функция public String getName(Object object) {...}
К примеру есть объекты: Object myObject111 = new Object(); File parentDirectory = new File(); ...

3
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
20.09.2019, 02:45 2
Цитата Сообщение от Evgen8 Посмотреть сообщение
Имеется массив n-й глубины типа Object -> хотелось бы его скопировать.
А если так?
Java
1
2
3
4
Object[][] ar2 = new Object[ar1.length][ar1[0].length];
for(int i=0; i<ar1.length; i++) 
     for(int j=0, j<ar1[0].length; j++) 
          ar2[i][j] = ar1[i][j];
0
4 / 4 / 2
Регистрация: 24.05.2013
Сообщений: 300
20.09.2019, 03:16  [ТС] 3
ViktorFX, глубина равна n, а не два... но для двух прекрасно работает )
0
Эксперт функциональных языков программированияЭксперт Java
4534 / 2723 / 485
Регистрация: 28.04.2012
Сообщений: 8,602
20.09.2019, 10:27 4
Лучший ответ Сообщение было отмечено Evgen8 как решение

Решение

Цитата Сообщение от Evgen8 Посмотреть сообщение
Но как преобразовать результат к Object[][]?
В общем случае — никак, насколько я понимаю. Ты можешь преобразовать к Object[], а дальше уже каждый его элемент — отдельно к Object[] везде, где необходимо, либо напиши свои функции deepElemAt и deepChangeElemAt, которые будет также рекурсивно находить/менять нужный элемент.

Java
1
2
3
4
5
6
7
    static Object deepElemAt(Object array, int... indexes) {
        
    }
    
    static void deepChangeElemAt(Object array, Object newElem, int... indexes) {
        
    }
Ну или попробовать написать свой cast:

Java
1
2
3
4
5
    static <T> T deepCast(Object array, Class<T> type) {
        
    }
 
final Object[][] copy = deepCast(deepCopy(test1), Object[][].class);
0
20.09.2019, 10:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2019, 10:27
Помогаю со студенческими работами здесь

Object
private Class имя = Object.class; обьясните мне пожалуйста суть вот этой строки - Object.class...

Object object = new B()
Объясните кто-нибудь, почему в этом коде компилятор не находит метод m2 в классе B. Что я...

Связь с Object
Объясните что такое фактический класс. Что значит &quot;Любой объект представляет собой экземпляр класса...

Return Object?
Есть метод с повторяющимся кодом: &quot;preparedstatement.setХХХ(j, ХХХ.valueOf(param));&quot; public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru