Звонит Class.getInstance()
эквивалентный new Class()
? Я знаю, что конструктора вызывают для последнего, но что относительно getInstance()
?Спасибо.
Не существует такого метода, как 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 .
В контексте абстрактного класса метод getInstance ()
может представлять шаблон фабричного метода . Примером может служить абстрактный класс Calendar
, который включает статические фабричные методы и конкретный подкласс.
Абсолютно (обычно) нет.
getInstance
- статический метод, часто используемый с Singleton Pattern в Java. Ключевое слово new
фактически создает новый объект. В какой-то момент должен быть новый
(хотя есть несколько других методов для создания экземпляров новых объектов), чтобы фактически создать объект, который возвращает getInstance
.