Я хочу знать, как частный конструктор полезен в java. , которые представляют собой различные способы использования частного конструктора в java.Что такое частный конструктор в java
ответ
В дополнение к другим ответам:
Если вы хотите создать одноэлементный класс, вам нужно скрыть конструктор, поэтому его можно назвать только внутренне.
Могу ли я получить пример этого .... –
Да, см. Другие 50 ответов, сообщающих вам то же самое :-D –
Использование частного конструктора останавливает его создание чем-либо «вне» объекта. Это часто используется в таких вещах, как шаблон singleton, где он пытается обеспечить только один экземпляр класса.
This link also предлагает некоторые хорошие описания ...
ИМХО некоторые использования являются
- в Singleton
- из другого конструктора ..
частный конструктор используется, когда вам хотите, чтобы этот класс не мог быть введен в действие извне
Использует
Случай 1: При создании sington classs
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:, когда вы не хотите какой-либо экземпляр объекта, как в Util классы
public final class Util {
private Util() {
}
}
В классе UTIL все методы являются статическими, так нет необходимости создания своего объекта, так в в этом случае используется частный конструктор
Согласно http://stackoverflow.com/questions/323022/static-class-vs-class- with-private-constructor-and-all-static-properties-and-me Я думаю, что со статическим классом util вам не нужно создавать частный contructor. –
@ZuzooVn в java вы не можете создавать класс как статический. Вопрос, который вы упомянули в комментарии, основан на языке C# –
*** «Никто не может создать объект SingletonClass извне». *** Что делать, если внешняя сторона имеет значение SingletonClass s = SingletonClass.getInstance(); ? Я считаю, что преимущество в вашем примере состоит в том, чтобы предотвратить появление нескольких экземпляров SingletonClass. –
частный конструктор выключен, чтобы ограничить экземпляр класса.
На самом деле хорошее использование частного конструктора в шаблоне 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;
}
}
таким образом, вы можете гарантировать, что только один экземпляр класса активен.
Другие виды использования могут заключаться в создании класса , который содержит только статические методы.
Для более анализа вы можете посмотреть в другой переполнения стека отвечает
Can a constructor in Java be private?
Некоторые причины, где вам может понадобиться частный конструктор:
для предотвращения экземпляр вне объекта, в f ollowing случаи:
одноэлементные
фабричный метод
статические-методы только (полезность) класса
константы только для класса
Вы можете также см. этот код:
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;
}
}
Другое использование частных конструкторов - убедиться, что существует только ограниченный набор экземпляров класса.
Например:
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 перечислений, однако.
Как уже упоминалось другие ответы, распространенные области применения включают шаблон одноплодной, внутренний конструктор формирования цепочки и еще одно:
Java не поддерживает то, что в C# (например) известен как «статический класс »- другими словами, полезный класс . Класс утилиты - это вспомогательный класс, который должен содержать только статические элементы. (Math
и System
- такие случаи в Java.) Для них не имеет смысла создавать экземпляр каким-либо образом.
В C# создание статического класса делает его неявным как окончательным/герметичным, так и абстрактным. В Java нет такого ключевого слова, и вы не можете сделать окончательный класс и аннотация. Поэтому, если у вас есть такой класс утилиты, вы бы сделали его окончательным и предоставили ему частный конструктор, который никогда не вызывался.
BTW Новый подход к статическому классу - это 'enum'. –
@MarkoTopolnik Можете ли вы привести пример? –
'public enum Utility {; public static void fn1() {}} ' –
Вы не можете пользователи класса инстанцировать его непосредственно, но вместо того, чтобы использовать удобный статический метод вместо этого, для очень надуманного примера строителя:
public FooBuilder {
private FooBuilder(FooBar bar) {
...
}
public static FooBuilder using(FooBar bar) {
return new FooBuilder(bar);
}
}
Вы затем использовать его, вызвав статический метод:
FooBuilder.using(bar) // further chained methods etc...
Если вы не хотите, чтобы кто-то делал экземпляр вашего класса (по крайней мере, вызывая конструктор). – chris
Возможный дубликат - http: // stackoverflow.com/questions/2816123/can-a-constructor-in-java-be-private – mtk
@R Martinho Fernandes Я хочу ответить на этот вопрос относительно C++ тоже ... –