2017-01-31 12 views
0

Теперь я читаю официальную документацию по PlayFramework, но на самом деле это не имеет значения.Guice: @Inject at static fields

И я увидел это предложение:

Обратите внимание, что тот экземпляр поле. Как правило, не имеет смысла вводить статическое поле, поскольку оно разрушает инкапсуляцию.

Они объяснили, что устарели использовать @Inject аннотация для статических полей. Зачем? Я не понимаю, «сломать инкапсуляцию». Как вы думаете, что они подразумевают под предложением?

ответ

0

Это своего рода очевидный принцип ООП (инкапсуляция), так @Inject предоставит поле экземпляра (это взято из документации Play), тогда, конечно, будет странно делать его статическим, так как ВСЕ экземпляры будут разделять тот же объект для поля А, что одна из возможных проблем, и одна из определения разрывной капсулирования

Этот API не рекомендуется для общего использования, потому что она страдает многими в те же проблемы, что и статические фабрики: неудобно тестировать, он делает ошибки непрозрачными, и он полагается на глобальное состояние.

0

Может быть, потому что стилистически

class Foo 
{ 
    @Inject 
    static String propery; 
} 

является equiavalent из

class Foo 
{ 
    static String propery; 

    Foo(String property) { 
    this.property = property; 
    } 
} 

тех, кто не знает детали реализации могут быть удивлены результатом

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

  • Нет связанных вопросов^_^