Я хочу знать, как частный конструктор полезен в java. которые представляют собой различные способы использования частного конструктора в java.
Что такое использование частного конструктора в java
Ответ 1
закрытый конструктор выключен, чтобы ограничить экземпляр класса.
На самом деле хорошее использование частного конструктора в шаблоне Singleton. здесь пример
public class ClassicSingleton {
private static ClassicSingleton instance = null;
private ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
таким образом вы можете гарантировать, что активен только один экземпляр класса.
Другими способами может быть создание класса , который содержит только статические методы.
Для большего анализа вы можете посмотреть другие ответы
Может ли конструктор в Java быть закрытым?
Ответ 2
частный конструктор используется, когда вы хотите, чтобы этот класс не мог быть intitalise извне
Использование
Случай 1: При создании одноклассных классов
public class SingletonClass {
public static SingletonClass singletonClass;
private SingletonClass() {
}
public static SingletonClass getInstance() {
if(singletonClass == null) {
singletonClass = new SingletonClass();
}
return singletonClass;
}
}
В этом случае только метод intialization выполняется методом getInstance. Никто не может создать объект SingletonClass вне.
Случай 2:, если вы не хотите, чтобы какой-либо экземпляр объекта, как в классах использования
public final class Util {
private Util() {
}
}
В классе util все методы статичны, поэтому нет необходимости создавать свой объект, поэтому в этом случае используется частный конструктор
Ответ 3
Как упоминалось в других ответах, общие применения включают в себя singleton pattern, внутреннюю цепочку конструкторов и еще одну:
Java не поддерживает то, что в С# (например) известно как "статический класс" - другими словами, класс . Класс утилиты - это вспомогательный класс, который должен содержать только статические элементы. (Math
и System
- такие случаи в Java.) Для них не имеет никакого смысла создавать экземпляр каким-либо образом.
В С# создание статического класса делает его неявным как окончательным/герметичным, так и абстрактным. В Java нет такого ключевого слова, и вы не можете сделать класс окончательным и абстрактным. Поэтому, если у вас есть такой класс утилиты, вы бы сделали его окончательным и предоставили ему частный конструктор, который никогда не вызывал.
Ответ 4
Использование частного конструктора останавливает его создание чем-либо "вне" объекта. Это часто используется в таких случаях, как singleton, где он пытается обеспечить только один экземпляр класса.
Эта ссылка также предлагает несколько хороших описаний...
Ответ 5
Некоторые причины, по которым вам может понадобиться частный конструктор:
чтобы предотвратить создание экземпляра вне объекта, в следующих случаях:
-
одноточечно
-
factory метод
-
класс static-methods-only (utility)
-
класс констант
Вы также можете ссылаться на этот код:
public class MySingletonEx
{
private static MySingletoneEx instance = new MySingletonEx("This takes a string");;
private MySingletonEx(final String myString)
{
// This is a private constructor
}
public static MySingletonEx getInstance()
{
return instance;
}
}
Ответ 6
В дополнение к другим ответам:
Если вы хотите создать одноэлементный класс, вам нужно скрыть конструктор, поэтому его можно вызвать только внутри.
Ответ 7
Некоторое использование IMHO
- в Singleton
- От другого конструктора..
Ответ 8
Возможно, вы не захотите, чтобы пользователи этого класса инстанцировали его напрямую, но вместо этого вместо этого использовали удобный статический метод для примера очень конструктивного построения:
public FooBuilder {
private FooBuilder(FooBar bar) {
...
}
public static FooBuilder using(FooBar bar) {
return new FooBuilder(bar);
}
}
Затем вы используете его, вызывая статический метод:
FooBuilder.using(bar) // further chained methods etc...
Ответ 9
Если вы не хотите, чтобы какой-либо конкретный класс был создан каждый раз.
Ответ 10
Другое использование частных конструкторов - убедиться, что существует только ограниченный набор экземпляров класса.
Например:
public class Color
{
public static final Color red = new Color("red");
public static final Color yellow = new Color("yellow");
public static final Color blue= new Color("blue");
private Color(String name) {
this.name = name;
}
.
.
.
}
Это использование, в основном, было вытеснено перечислениями Java.