2015-08-26 2 views
0

Можно ли иметь объект внутри EAR, как класс Calculator, который будет использоваться в качестве утилиты для других классов без гражданства?Объект Java со статическим экземпляром переменной внутри элемента без состояния

Плохо ли это дизайн? Если да, то какой подход должен применяться?

@Stateless 
    class A{ 
     public void sumForA(){ 
      System.out.println("SUM IS : "+ (Calculator.getInstance().add(4+6))); 
     } 
    } 

    @Stateless 
    class B{ 
     public void sumForB(){ 
      System.out.println("SUM IS : "+(Calculator.getInstance().add(1+2))); 
     } 
    } 

    public class Calculator{ 

     static{ 
      INSTANCE=new Calculator(); 
     } 

     private static INSTANCE; 

     public Calculator getInstance(){ 
      return INSTANCE; 
     } 

     public int add(int x,int y){ 
      return x+y; 
     } 
    } 

ответ

0

Во-первых, нет такого имени «статическая переменная экземпляра», есть переменные экземпляра и статические переменные, вы можете найти пример здесь: Java Static vs Instance.

Во-вторых, в отношении вашего класса Calculator вам нужно пометить метод getInstance() как статический beacause, который вы вызываете его напрямую. И, похоже, вы пытаетесь использовать шаблон singleton, я предлагаю вам взглянуть на этот вопрос SO: What is an efficient way to implement a singleton pattern in Java?

В-третьих, в вашем примере в факторе statless нет статической переменной, и это упростит: вы только вызывая метод в калькуляторе класса, который имеет статические члены. Так почему бы не?! вы используете свой класс утилит внутри своего метода, неважно, является ли он фанатом без состояния или любым видом фасоли (EJB-сессиями, CDI/JSF-компонентами, компонентами Spring ...).

+0

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

+0

@ d12ei рад, что это помогло :) – Tarik

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