Различие между вызовом нового и getInstance ()

Звонит Class.getInstance() эквивалентный new Class()? Я знаю, что конструктора вызывают для последнего, но что относительно getInstance()?Спасибо.

14
задан naXa 11 May 2014 в 17:37
поделиться

3 ответа

Не существует такого метода, как Class # getInstance () . Вы, вероятно, путаете его с Class # newInstance () . И да, это точно так же, как new в конструкторе default . Вот выдержка из его Javadoc :

Создает новый экземпляр класса, представленного этим объектом Class . Класс создается как если бы выражением new с пустым списком аргументов. Класс инициализируется, если он еще не был инициализирован.

В коде

Object instance = Object.class.newInstance();

совпадает с

Object instance = new Object();

Вызов Class # newInstance () фактически следует шаблону Factory Method .


Обновление : увидев другие ответы, я понимаю, что в вашем вопросе есть некоторая двусмысленность. Что ж, места, где используется метод на самом деле с именем getInstance () , часто обозначают паттерн Abstract Factory . Он будет «под капотами» использовать new или Class # newInstance () для создания и возврата интересующего экземпляра.Это просто, чтобы скрыть все детали о конкретных реализациях, о которых вам, возможно, не нужно знать.

Кроме того, вы также часто видите это имя метода в некоторых (в основном собственных) реализациях паттерна Singleton .

См. Также:

24
ответ дан 1 December 2019 в 07:18
поделиться

В контексте абстрактного класса метод getInstance () может представлять шаблон фабричного метода . Примером может служить абстрактный класс Calendar , который включает статические фабричные методы и конкретный подкласс.

5
ответ дан 1 December 2019 в 07:18
поделиться

Абсолютно (обычно) нет.

getInstance - статический метод, часто используемый с Singleton Pattern в Java. Ключевое слово new фактически создает новый объект. В какой-то момент должен быть новый (хотя есть несколько других методов для создания экземпляров новых объектов), чтобы фактически создать объект, который возвращает getInstance .

5
ответ дан 1 December 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: