2012-02-28 3 views
0

В Java лучше использовать статические элементы при изменении одной переменной в разных областях/модулях или передать объект с помощью аргументов?Передача объектов против статических элементов

+6

Слишком общий вопрос для ответа (и неправильное место, чтобы спросить), но общая мудрость заключалась бы в том, чтобы передать объект явно ... –

ответ

1

Это не должен быть технический вопрос, а вопрос дизайна. Когда вы разрабатываете свой класс, вы разделяете поля в свойствах класса и свойства экземпляра. Вот простой пример:

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; 

    // ... 
} 
+0

(если это был вопрос ...) –

+0

Да, это было правильно. – Lemmons

+0

@Andreas_D - вы явно никогда не видели Reliant Robin :-) –

1

Java - это объектно-ориентированный язык программирования, он лучше всего работает, если вы используете его в объектно-ориентированном виде.

Непонятно, что вы подразумеваете под «модификацией одной переменной в разных областях/модулях», но ответ (вероятно) заключается в том, что лучше избегать использования статических методов.

Это, безусловно, плохая идея, чтобы выставить поля, чтобы они могли быть доступны и изменены статическим методом в другом классе. Он разрушает границу абстракции классов и приводит к межклассовому взаимодействию, которое вредно по-разному.

0

Когда вы использовали 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)

0

Используйте шаблон одноэлементного для реализуете ваши требования

Смежные вопросы