Java stati c instance VS get-метод - PullRequest
       50

Java stati c instance VS get-метод

0 голосов
/ 29 февраля 2020

Я думал о разнице между этими фрагментами кода. Я понимаю, что вы не можете установить поле экземпляра, если вы используете getInstance (второй вариант ниже), но есть ли другие различия?

public class MainClass {
    public static MainClass instance;

    public static void main(String[] args) {
        instance = new MainClass();
    }

    public void HelloWorld() {
        System.out.println("This is a test!");
    }
}

VS

public class MainClass {
    private static MainClass instance;

    public static void main(String[] args) {
        instance = new MainClass();
    }

    public MainClass getInstance() {
        return instance;
    }

    public void HelloWorld() {
        System.out.println("This is a test!");
    }
}

В чем разница между используя "MainClass.instance.HelloWorld ();" (Первый) или "MainClass.getInstance (). HelloWorld ();" (Второй)

TLDR: Какой и почему? Какая разница?

Спасибо! :)

Ответы [ 3 ]

1 голос
/ 29 февраля 2020

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

Во втором примере вы объявили instance как private делая его невидимым вне класса и, таким образом, гарантируя, что при необходимости он может быть изменен только через public мутатор / сеттер, где вы можете поместить желаемые логи c так, как вы хотите, чтобы они были изменены.

0 голосов
/ 29 февраля 2020

Publi c

Текущий код уязвим для посторонних, которые могут заменить ваш экземпляр на новый или даже свой собственный путем создания подклассов. Если вам не нужно менять экземпляр после первого init, сделайте его окончательным, а затем publi c хорошо.

private

Избавляет вас от вышеуказанных проблем. Дает вам больше контроля, чтобы изменить экземпляр, если это необходимо.

0 голосов
/ 29 февраля 2020

Масштабируемость

Разница где-то внизу, если ваша программа имеет много обращений к экземпляру, и вы хотите изменить источник экземпляра или выполнить дополнительное действие при получении Например, вы можете изменить метод getInstance() вместо добавления кода в каждое место, где вы использовали instance.

...