Подтвердить что ты не робот

Что такое использование частного конструктора в java

Я хочу знать, как частный конструктор полезен в java. которые представляют собой различные способы использования частного конструктора в java.

4b9b3361

Ответ 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.