В Java лучше использовать статические элементы при изменении одной переменной в разных областях/модулях или передать объект с помощью аргументов?Передача объектов против статических элементов
ответ
Это не должен быть технический вопрос, а вопрос дизайна. Когда вы разрабатываете свой класс, вы разделяете поля в свойствах класса и свойства экземпляра. Вот простой пример:
public class Car {
// every instance of "Car" has wheels -> static
public static boolean hasWheels = true;
// every instance of "Car" has an individual colour -> non static
public Colour colour;
// ...
}
(если это был вопрос ...) –
Да, это было правильно. – Lemmons
@Andreas_D - вы явно никогда не видели Reliant Robin :-) –
Java - это объектно-ориентированный язык программирования, он лучше всего работает, если вы используете его в объектно-ориентированном виде.
Непонятно, что вы подразумеваете под «модификацией одной переменной в разных областях/модулях», но ответ (вероятно) заключается в том, что лучше избегать использования статических методов.
Это, безусловно, плохая идея, чтобы выставить поля, чтобы они могли быть доступны и изменены статическим методом в другом классе. Он разрушает границу абстракции классов и приводит к межклассовому взаимодействию, которое вредно по-разному.
Когда вы использовали static member
, у вас есть экземпляр этого элемента в static memory
, поэтому, когда другой поток меняет его значение члена, другой поток видит последнее значение. для понимать его видеть следующий пример кода:
public class Counter
{
public static int number = 10;
public Counter(int c)
{
number = c;
}
public static final void main(String[] args)
{
Counter counter_1 = new Counter(20);
Counter counter_2 = new Counter(30);
System.out.println(counter_1.number);
System.out.println(counter_2.number);
}
}
При запуске этой программы см следующий вывод:
30
30
Таким образом, в статическом подходе Thread Safely
является важным вопросом. , но когда вы использовали object passing
Approch, любой поток имеет свой контекст (Thread-Context
), так что изменения опубликовано в собственном контексте потока (также этот результат зависит от того, если вы используете или не Singleton Pattern
)
Используйте шаблон одноэлементного для реализуете ваши требования
- 1. Инициализация объектов статических элементов
- 2. Передача объектов против ID
- 3. членов класса против статических элементов в Vala
- 4. Преимущества характеристик типа против статических элементов?
- 5. Переопределение статических элементов и статических статических массивов
- 6. Передача объектов против передачи ссылок/указателей?
- 7. C++ передача параметров массива против отдельных элементов
- 8. Функции против статических методов
- 9. Запирание статических элементов класса
- 10. Что говорит против статических полей?
- 11. Передача статических параметров классу
- 12. Передача статических значений
- 13. Сериализация статических объектов ArrayList
- 14. Формирование статических объектов
- 15. Устранение статических объектов C#
- 16. Сбор мусора статических элементов
- 17. Инициализация статических элементов C++
- 18. Запрограммированные классы против статических классов?
- 19. App ресурсам против статических переменных
- 20. андроида - strings.xml против статических констант
- 21. Статические переменные против статических свойств
- 22. статический метод против статических данных
- 23. Весовой рисунок против статических полей
- 24. определение объектов класса asmx webservice как статических
- 25. Передача статических полей в поток
- 26. Связывание объектов и статических библиотек
- 27. Управление порядком конструктора статических объектов
- 28. Использование статических объектов в asp.net
- 29. GC ссылки статических объектов обнулить
- 30. Несрочная инициализация локальных статических объектов?
Слишком общий вопрос для ответа (и неправильное место, чтобы спросить), но общая мудрость заключалась бы в том, чтобы передать объект явно ... –