在the official document中,你可以看到关于场注射的这句话。
避免对包含weak semantics的最终字段使用字段注入。
为什么没有使用最终修饰符的场注射有意义? 谁能解释一下?
答案 0 :(得分:4)
你基本上是在问以下问题:“弱语义”是什么意思?
一般来说,正如您所指出的,“语义”是“意义”。此外,在编程中semantics指的是:
严谨...研究编程语言的意义。
当我们说“注入最终字段具有弱语义”时,意味着“注入最终字段使得很难严格地推断出程序的含义。”
为什么呢?正如蜘蛛鲍里斯的评论中所指出的,“弱语义”指的是this behaviour:
在任何其他上下文中使用[使用反射设置最终字段] [比序列化]可能具有不可预测的效果,包括程序的其他部分继续使用此字段的原始值的情况“
这意味着如果使用反射来设置final
字段,程序的含义(语义)会变得模糊,因为它现在具有不可预测的行为。
不可预测的行为就是链接文档中提到的行为:程序的其他部分可以继续使用final
字段的原始值。不清楚程序的哪些部分正在使用原始值以及哪些部分正在使用重新分配的值。