скопировать содержимое статического массива из другого класса?

1

Можно ли получить копию статического arraylist из другого класса. Я пытаюсь получить доступ к arraylist из другого класса и всегда получаю пустой. Я был в предположении, что мы можем напрямую обращаться к статическим переменным...

В основном я хочу получить копию архариста после того, как что-то было добавлено к нему. Как я могу это сделать?

    import java.util.ArrayList;        

    public class two {

        public static void main(String[] args) {
            // TODO Auto-generated method stub

            ArrayList<Integer> two = one.getTemp();

            for (int i = 0; i < two.size(); i++) {

                System.out.println(two.get(i));

            }               
        }        
    }

import java.util.ArrayList;

public class one {

    public static ArrayList<Integer> temp = new ArrayList<Integer>();

    public static ArrayList<Integer> getTemp() {

        return temp;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        for (int i = 0; i < 10; i++) {

            temp.add(i * 10);

        }

        for (int i = 0; i < 10; i++) {

            System.out.println(temp.get(i));

        }

        while (true) {

        }
    }    
}
  • 1
    Какой main метод вы пытаетесь вызвать ??
  • 0
    Сначала я запусту один и попытаюсь получить arraylist из одного в два ...
Показать ещё 1 комментарий
Теги:
arraylist

2 ответа

0
Лучший ответ

Вы инициализируете ArrayList в основном методе и хотите использовать этот arraylist во втором классе, но ArrayList из Class One будет инициализироваться при вызове основного метода из этого, а затем вы не сможете использовать его во втором классе. Сделать static блок, если вы хотите инициализировать это во время вызова метода get

import java.util.ArrayList;
public class Two {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(One.temp);
        ArrayList<Integer> copy=One.temp;
        One.temp.add(100);
        System.out.println(copy);
    }

}
class One{
    public static ArrayList<Integer> temp = new ArrayList<Integer>();

    public static ArrayList<Integer> getTemp() {

        return temp;
    }

    static {
            // TODO Auto-generated method stub

            for (int i = 0; i < 10; i++) {

                temp.add(i * 10);
            }

        } 
}

Вывод:

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

В классе два объекта мелкой копии происходит, поэтому, когда вы вносите какие-либо изменения в статический arraylist, он будет автоматически отображаться в списке класса 2.

  • 0
    в основном я хочу получить копию архива после того, как что-то было добавлено к нему. Как я могу это сделать?
  • 0
    где вы хотите скопировать это?
Показать ещё 2 комментария
0

Вы можете напрямую обращаться к static компонентам любого класса.

В вашем примере список статических temp массивов пуст. Он не был заполнен никакими данными.

Когда call one.getTemp() возвращает статический экземпляр по умолчанию списка массивов. В методе вы должны проверить, заполнен ли он. Если пусто, вы должны заполнить его и вернуться.

Способов много, но это один из них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню