Как классы Java получают информацию из класса Entry? - PullRequest
1 голос
/ 04 марта 2009

Итак, допустим, что в моем классе точки входа (т.е. в классе, который запускается при запуске программы (имеет функцию public static void main(String args[])). В этом классе у меня есть эта переменная:

private ArrayList<String> myData=new ArrayList<String>();

Этот класс создает экземпляр другого класса, который должен иметь доступ к члену myData класса точки входа. Как он может получить этот массив?

Редактировать: Чтобы уточнить, в методе main() я мог бы сделать это:

SomeOtherClass myClass=new SomeOtherClass();

и тогда я мог бы сделать:

myClass.someMethod();

однако в объекте myClass как я могу выполнить метод / извлечь что-то из класса входа, который создал экземпляр объекта myClass?

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

Лучший способ предоставить классу, к которому вы обращаетесь, экземпляр myData, - передать его в конструктор при его создании.

Затем в конструкторе вы можете сохранить ArrayList в переменную-член класса.

Например, ваш конструктор объекта будет выглядеть так:

private ArrayList<String> myData;

public YourObjConstructor(ArrayList<String> data){
    myData = data;
}
2 голосов
/ 04 марта 2009

Звучит так, что ваша точка входа все еще статична, когда вызывает другой класс, но ваш ArrayList является членом экземпляра этого класса. Вам нужно выйти из статического мира и попасть в инстансы.

Я бы преобразовал ваш метод main в частный конструктор и вставил бы новый метод main (), который запускает его как новый экземпляр.

Обратите внимание, что этот код очень грубый, но он должен служить иллюстрацией того, что вам нужно сделать.

public class EntryPoint {
    private ArrayList<String> myData=new ArrayList<String>();

    public static void main( String[] args ) {
        EntryPoint ep = new EntryPoint();
        ep.init();
    }

    private void init() {
        // Populate myData perhaps?

        SomeOtherClass myClass=new SomeOtherClass();
        myClass.someMethod( this );
    }

    public List<String> getMyData() {
        return myData;
    }
}   

public class SomeOtherClass {
    public void someMethod( EntryPoint entry ) {
        List<String> data = entry.getMyData();
        // do stuff with data..!
    }
}
1 голос
/ 04 марта 2009

Класс, содержащий main(), является просто обычным классом. В вашем случае вам придется сделать myData public и, возможно, static (или, конечно, добавить аксессор). Как и в случае с любым другим классом.

Вы также можете передать объект Entry другому классу, например:

public static void main(String[] args) {
    Entry entry = new Entry();
    SomeOtherClass myClass=new SomeOtherClass(entry);
    // continue as before
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...