Lad*_*ein 6 java dependency-injection language-design immutability
我希望能够指定对象的成员变量在对象被"初始化"后是不可变的,这对我来说意味着在它注入任何依赖项之后,并且已经执行了它只能执行的任何其他初始化操作在DI之后.
是否有满足我兴趣的语言 - 以这种方式形式化DI,初始化和支持不变性?也许让它们成为语言的一部分是愚蠢的; 也许不吧.我不确定.
今天我用Java编程,但我不能像我想的那样使用"final",因为这些阶段发生在构造函数完成执行之后.关于如何通过Java获得我想要的任何建议?我想我可以让我的对象实现一个基类,以便这些阶段在构造函数完成之前发生,或者使用方面来执行相同的操作.
思考?
我想这取决于你想要从不变性中得到什么。如果您想要保证线程安全(其中所有内容都必须声明为最终的,包括依赖项),那么我认为工厂、构建器或构造函数注入是您唯一的选择。
然而,如果您只想要状态的不变性,那么将状态变量声明为final就足够了。即使不可变的 String 类在其实现中也有一个可变字段(哈希码值的缓存)。只要您的代码确保实例在没有注入的情况下不可用,一切都应该很好。