Как класс может получить экземпляр себя? - PullRequest
0 голосов
/ 30 апреля 2018

Сегодня я работал над учебником по интеграции кнопок в встроенный игровой движок. Это код, который запрашивает выигрыш.

public class ButtonEvent{

    private Window win;

    public ButtonEvent(){

        this.win = Window.getWindow();

    }

    /*Other methods*/

}

Я просмотрел все видео до конца, но парень, который посещал урок, никогда не упоминал, что он сделал со своим уроком Window, чтобы сделать это. В этом видео он случайно щелкнул класс окна, а затем щелкнул следующий класс, и в то время, когда я приостановил воспроизведение видео, я увидел его метод getWindow (). Который я написал ниже.

public class Window extends Canvas{

public Window win; //I tried doing this

    /*Other methods*/ 

    public static Window getWindow(){
        return win;
    }

}

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Используйте одноэлементный шаблон, чтобы гарантировать, что только один экземпляр Window создается и используется во всем приложении. Обратите внимание, что синглтоны считаются «анти-паттернами», что означает, что обычно есть лучший способ сделать это, например, использовать объекты, управляемые контейнером (см. PicoContainer, Spring IoC и т. Д.).

public class Window {
    private static Window INSTANCE = null;

    public static Window getWindow() {
        if (INSTANCE == null) {
            INSTANCE = new Window();
        }
        return INSTANCE;
    }
}
0 голосов
/ 30 апреля 2018

Изменение

public Window win;

до

private static Window win = new Window();

И у вас будет правильная локальная видимость для getWindow(), чтобы увидеть поле Window, и оно будет инициализировано вызовом неявного пустого конструктора, который вставляет компилятор (это присваивание new Window).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...