Я хочу создать один экземпляр класса. Как я могу создать один экземпляр класса в Java?Отдельный экземпляр класса Java
ответ
Чтобы создать действительно один экземпляр вашего класса (подразумевая одноэлемент на уровне JVM), вы должны сделать свой класс Java enum
.
public enum MyClass {
INSTANCE;
// Methods go here
}
Одноэлементный шаблон использует статическое состояние и, как результат, обычно приводит к хаосу при модульном тестировании.
Это объясняется в пункте 3 Эффективной Java Joshua Bloch.
Чтобы быть точным, синглтон будет только на уровне класса загрузчика, вы должны управлять всеми загрузчиками классов в JVM, чтобы иметь возможность гарантировать синглтон на уровне JVM. – pgras
Думаю, вы обнаружите, что это злоупотребление тем, что предназначено для перечисления. Перечисление относится к нескольким связанным элементам (например, дням недели), так что вы можете иметь безопасный способ выполнения переключателей/сравнений и т. Д. Они не относятся к одному экземпляру класса. Синглтоны усложняются с различными структурами загрузчика классов, но это происходит независимо от того, как вы его реализуете. – Shane
@Shane, см. Эффективная Java. Переменные Java намного больше, чем простые перечисления, доступные на других языках. – gpampara
используйте одноэлементный узор.
Update:
Что такое синглтон шаблон? Одноэлементная модель представляет собой образец дизайна, который используется для ограничения экземпляра класса к одному объекту
Очень простой одноплодным.
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {
// hidden constructor
}
public static Singleton getInstance() {
return instance;
}
}
Вы также можете использовать ленивый шаблон держатель, а
public class Singleton {
private Singleton() {
// hidden constructor
}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
Эта версия не будет создавать экземпляр синглтона до тех пор, пока доступ к GetInstance(), но в связи с тем, как JVM/загрузчик классов обрабатывает создание во внутреннем классе, вам гарантированно будет иметь только один конструктор.
Объяснение: Я не думаю, что невозможно ограничить выполнение конструктора. Решение состоит в следующем: сделать конструктор закрытым - чтобы никто не вызывал его извне. Используйте статическую функцию для инициализации единственного экземпляра объекта - если он равен NULL, затем вызовите конструктор изнутри. – effkay
Единственное улучшение, которое я сделал бы для этого, - это ленивая инициализация синглтона. –
Почему статический блок? Вы можете просто запустить экземпляр в той же строке, где вы его объявите. @Taylor L Вы не обязательно всегда хотите ленивый init, который зависит от остальной части приложения и его требований к загрузке. –
In Java, how can we have one instance of the BrokerPacket class in two threads?
Для того, чтобы все потоки обновляли хранилище, нужно разделить BrokerLocation в одном массиве адресов. Например:
class BrokerLocation implements Serializable {
public String broker_host;
public Integer broker_port;
/* constructor */
public BrokerLocation(String host, Integer port) {
this.broker_host = host;
this.broker_port = port;
}
}
public class BrokerPacket implements Serializable {
public static BrokerLocation locations[];
}
- 1. Отдельный экземпляр класса C++
- 2. Отдельный экземпляр класса в Python
- 3. Отдельный экземпляр класса с разными аргументами
- 4. Как сделать отдельный экземпляр намерения класса android
- 5. Отдельный экземпляр приложения для пользователя в Java
- 6. Как экземпляр класса Java класса?
- 7. Java; экземпляр глобального класса?
- 8. Java синхронизировать экземпляр класса
- 9. Отдельный экземпляр без одноэлементного рисунка
- 10. Отдельный экземпляр объекта
- 11. Отдельный экземпляр веб-страницы
- 12. LinkedBlockingDeque.take() - отдельный экземпляр в потоке
- 13. Отдельный экземпляр объекта за транзакцию
- 14. Положите Java Threading класса в отдельный класс
- 15. Java Экземпляр времени жизни класса
- 16. Сделать глобальный экземпляр класса - JAVA
- 17. Не экземпляр класса Vectors java
- 18. Java - анонимный экземпляр абстрактного класса
- 19. Отдельный экземпляр класса обслуживания в угловом2 Модуль/приложение
- 20. Как зарегистрировать отдельный экземпляр класса с использованием контейнера Windsor
- 21. Отдельный экземпляр всех форм WinForm
- 22. Отдельный экземпляр приложения в C#
- 23. Отдельный экземпляр из нескольких передач
- 24. Как создать отдельный экземпляр приложения
- 25. Лучше ли создать один экземпляр класса или создать отдельный экземпляр для каждого события?
- 26. Выберите отдельный элемент класса
- 27. Отдельный экземпляр PicketLink для нескольких приложений
- 28. экземпляр класса из объекта класса
- 29. Создать экземпляр класса внутри класса
- 30. Java - добавить экземпляр абстрактного класса в другой экземпляр
'new MyClass()' выполнен один раз? –
OT - цитата из более раннего вопроса: «Я очень familier с языком программирования Java» - girinie, честно говоря, я не ожидал этого вопроса - вы * должны * улучшить свои навыки Java, прежде чем атаковать свой проект интернет-магазина (http: //stackoverflow.com/questions/2055016/web-site-design-idea-closed)! По крайней мере, вы должны знать (мастер?) Шаблоны GoF. –