这只是解决我偶然发现的争议的一个快速问题(对不起,我没有链接)。
我如何声明对象是这样的:
class Foo {
private Bar aBar = new Bar();
...
}
现在我发现的争议说这是糟糕的Java。我不知道他为什么这么说,但他非常坚定。他提出的是所有对象都应该在类体中声明,但是在构造函数之前不会被实例化。任何人都可以为我阐明这一点吗?在构造函数中实例化对象确实更好吗?
TFYT
〜Aedon
编辑1:
我知道我使用了争议这个词,但我并不打算将其作为争议。
答案 0 :(得分:4)
在大多数情况下,这无关紧要。我的经验法则是:
推理:通过在声明点初始化,它是 clear ,无论构造函数和参数如何,都将以相同的方式分配值。它还使您的构造函数更简单,并且没有重复。
警告:不要也在构造函数中分配值,否则会使先前的清晰度无效:)
我建议您询问您的同事(或其他任何人),因为他声称您当前的代码“不好”。我确信有有效的替代观点,但如果他不能提供任何理由,那么就没有理由关注IMO。
另一个快速说明 - 我假设没有一个初始化者需要做任何重要的工作。如果他们这样做,那可能是一个混乱的点,特别是如果抛出异常。一般来说,我不喜欢我的构造函数做了很多工作。
答案 1 :(得分:2)
通过在构造函数中指定属性,可以立即清楚实例化类时将运行的代码 如果在字段声明中指定,则读取类构造函数的人将不会意识到该字段已在其他位置设置。
答案 2 :(得分:1)
构造函数的约定是创建一个语义上有效的实例。这就是所有字段都被正确初始化为合理的值等等。因此,初始化构造函数中的所有内容有助于阐明构成类的有效实例的原因。此外,当您有多个构造函数时,可以使用构造函数链接等机制来避免重复相同的代码。
然而,这只是一本类似教科书的理论,在现实生活中,你有时会做更有利的事情。如果你在声明点实例化对象,那么它几乎没有区别,因此不需要强有力的立场导致争议。