2017-02-12 11 views
2

В the official document вы можете увидеть это предложение о полевой инъекции.Полевая инъекция с конечным полем в Guice

Избегайте использования полевых инъекций с конечными полями, имеющими weak semantics.

Почему нет инъекции в поле с окончательным модификатором имеет значения? Может ли кто-нибудь объяснить?

+1

Из связанного документа: «_Use в любом другом контексте может иметь непредсказуемые эффекты, в том числе случаи, когда другие части программы продолжают использовать исходное значение этого поля». Кажется, это плохая идея для меня. –

+1

Связанные: http://stackoverflow.com/a/3301720/1553851. См. ** Предостережения **. – shmosel

+0

@BoristheSpider Что из того, что вы процитировали, неверно? –

ответ

2

Вы по существу задаете следующее: Что означает «слабая семантика»?

В целом, как вы отметили, термин «семантика» означает «значение». Кроме того, в программировании semantics относится к:

строгое ... изучение значения языков программирования.

Когда мы говорим, что «инъекция конечных полей имеет слабую семантику», это означает, что «введение конечных полей затрудняет разумное рассуждение о значении вашей программы».

Почему? Как было отмечено в комментарии Бориса венца, «слабая семантика» относится к this behaviour:

Используйте [установки окончательного поля с помощью отражения] в любом другом контексте [чем сериализации] может иметь непредсказуемые последствия, в том числе случаев, в какие другие части программы продолжают использовать первоначальное значение этого поля»

это означает, что если вы используете отражение установить final поле, значение (семантика) вашей программы становится неясным, потому что теперь он имеет непредсказуемый поведение

Непредвиденный способное поведение просто указано в связанных документах: другие части программы могут продолжать использовать исходное значение поля final. Неясно, какие части программы используют исходное значение и какие части используют переназначенное значение.