В принципе, логический оператор И (&&
) вернет значение второго операнда, если первый - правy , и он вернет значение первого операнда, если оно сам falsy , например:
true && "foo"; // "foo"
NaN && "anything"; // NaN
0 && "anything"; // 0
Обратите внимание, что значения falsy - это те, которые принуждают к false
при использовании в булевом контексте, они null
, undefined
, 0
, NaN
, пустая строка и, конечно, false
, что-то еще прилегает к true
.
Создание singleton-класса является всего несколькими строками кода, и с трудностью создания универсального одиночного элемента, который я всегда пишу тем строкам кода.
public class Singleton
{
private Singleton() {}
static Singleton() {}
private static Singleton _instance = new Singleton();
public static Singleton Instance { get { return _instance; }}
}
private static Singleton _instance = new Singleton();
строка устраняет необходимость блокировки, поскольку статический конструктор ориентирован на многопотоковое исполнение.
Ну, это не действительно одиночный элемент - так как Вы не можете управлять T
, может быть столько T
экземпляры, сколько Вам нравится.
(удаленная гонка потока; отмеченный перепроверяемое использование)
Я удалил свой предыдущий ответ, поскольку я не заметил код, который проверяет на непубличных конструкторов. Однако это - проверка, которая только выполнена во время выполнения - нет никакого время компиляции проверка, которая является ударом против нее. Это также полагается на наличие достаточного доступа для вызова непубличного конструктора, который добавляет некоторые ограничения.
, Кроме того, это не запрещает внутренний конструкторы - таким образом, можно закончить с неодиночными элементами.
я лично создал бы экземпляр в статическом конструкторе для простой потокобезопасности, также.
В основном я не большая часть поклонника - довольно легко создать singleton-классы, и Вы не должны делать его это часто так или иначе. Одиночные элементы являются болью для тестирования, разъединяясь и т.д.