В классе main есть:
1) класс сlass1 в котором есть двумерный массив и еще несколько переменных
2) функция func(class1 cl) которая принимает объект класса но возвращает другой тип данных (float), при этом внутри тела функции проводятся манипуляции с двумерным массивом класса что бы получить ответ
Так вот, проблема в том, что если я создам экземпляр класса, вызову функцию и передам его туда, то после этого исходный массив объекта меняется (Что мне естественно не нужно) Я нашел решение в виде метода clone(), но хеш-код объектов то стал другим, а вот хеш-код полей внутри клона объекта тот же, и соответственно при изменении массива одного объекта изменяется массив другого
Подскажите пожалуйста как решить эту проблему?
Чтобы метод clone
клонировал поля объекта, его нужно переопределить в самом классе. По умолчанию он оперирует только примитивными типами и указателями
Но Вам нужно просто скопировать массив. Для этого есть метод Arrays.copyOf()
или банально вызвать clone
для массива
Вот тут описаны разные методы получения копии массива https://stackoverflow.com/a/36513254/5376639
Сделайте class1 сериализуемым (добавьте implements Serializable
в его определение).
Сохраняем объекта класса в поток байтов: ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream ous = new ObjectOutputStream(baos); ous.writeObject(new class1()); ous.close();
теперь в func
можно передать (class1)new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())).readObject()
Таким образом объект класса сохраняется в поток из которого восстанавливаться независимый клон.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Заранее благодаренЕсть MainActivity (первое) и LanguageActivity (второе)
Мне нужно получить таймзону клиента, для того, чтобы передать её в параметр компонента на страницеСтраница работает с бином, из которого...