2017-02-12 6 views
2

In the official document, können Sie diesen Satz über Feld Injektion sehen.Feld Injektion mit Endfeld in Guice

Vermeiden Sie die Feldinjektion mit endgültigen Feldern, die weak semantics hat.

Warum hat Feldinjektion mit Endmodifikator keine Bedeutung? Könnte jemand erklären?

+1

Aus dem verknüpften Dokument: "_Verwenden Sie in einem anderen Kontext möglicherweise unvorhersehbare Auswirkungen, einschließlich Fällen, in denen andere Teile eines Programms weiterhin den ursprünglichen Wert dieses Felds verwenden _". Scheint mir eine schlechte Idee. –

+1

Related: http://StackOverflow.com/A/3301720/1553851. Siehe ** Vorbehalte **. – shmosel

+0

@BoristheSpider Was ist falsch? –

Antwort

2

Sie fragen im Wesentlichen Folgendes: Was bedeutet "schwache Semantik"?

Im Allgemeinen, wie Sie festgestellt haben, ist "Semantik" "Bedeutung". Darüber hinaus in semantics bezieht sich auf:

die rigorose ... Studie der Bedeutung von Programmiersprachen.

Wenn wir sagen, „hat letzte Felder Injektion schwache Semantik“ bedeutet dies, dass „die Injektion letzte Felder macht es schwierig, konsequent über die Bedeutung des Programms zur Vernunft.“

Warum? Wie die Spinne im Kommentar von Boris stellte fest: „schwache Semantik“ bezieht sich auf this behaviour:

Verwenden [eine abschließende Feldeinstellung mit Reflexion] in jedem anderen Kontext [als Serialisierung] kann unvorhersehbare Auswirkungen haben, einschließlich den Fälle, in die anderen Teile eines Programms weiterhin den ursprünglichen Wert dieses Feldes verwenden“

es bedeutet, dass, wenn Sie Reflektion verwenden, um ein final Feld zu setzen, die Bedeutung (Semantik) des Programms wird dunkel, weil es jetzt unberechenbar hat Verhalten

Das Unvorhersehbare Das in den verknüpften Dokumenten erwähnte Verhalten ist das gleiche: Andere Teile des Programms können weiterhin den ursprünglichen Wert des Feldes final verwenden. Es wird unklar, welche Teile des Programms den ursprünglichen Wert verwenden und welche Teile den neu zugewiesenen Wert verwenden.