如何避免代码重复初始化最终属性?
public class Code{
//many properties
//...
final String NEWLINE;// ohh a final property!
void creation() //this method is for avoid repetition of code
{
//final initialization can't be put here =(
Source= new StringBuffer();
//many other commons new's ..
//...
}
Code()
{
NEWLINE = System.getProperty("line.separator");
creation();
}
Code(String name, int numberr)
{
NEWLINE = System.getProperty("line.separator");
creation();
name=new Someting(name);
number = new Magic(number);
}
}
public class Code{
//many properties
//...
final String NEWLINE;// ohh a final property!
void creation() //this method is for avoid repetition of code
{
//final initialization can't be put here =(
Source= new StringBuffer();
//many other commons new's ..
//...
}
Code()
{
NEWLINE = System.getProperty("line.separator");
creation();
}
Code(String name, int numberr)
{
NEWLINE = System.getProperty("line.separator");
creation();
name=new Someting(name);
number = new Magic(number);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是您的代码,有 4 种不同的初始化最终变量的方法。
初始化结果输出如下所示。
Here is your code with 4 different ways of initializing final variables.
The resulting output is shown below.
所有初始值设定项均由编译器添加到每个构造函数的开头。这包括:
{ .. }
所以你不必在任何地方都包含它,只需将它作为实例变量初始化:
或放在初始化块中:
当然,在这个准确的示例是,您应该将该字段设为
静态
。All initializers are added by the compiler to the beginning of each constructor. This includes:
{ .. }
So you don't have to include this everywhere just place it either as an instance-variable initialization:
or in initialization block:
Of course, in this precise example, you should make the field
static
.只需执行:
请参阅:JLS 8.3.2。字段初始化。
另请参阅:JLS 12.5 创建新类实例 表示执行顺序。
Just do:
See: JLS 8.3.2. Initialization of Fields.
See also: JLS 12.5 Creation of New Class Instances for execution order.
如果每次都以相同的方式初始化它们,则可以将代码放在构造函数之外。 Java 允许您执行
以下操作: 您还可以让除无参构造函数之外的所有构造函数调用无参构造函数。例如:
If they are being initialized the same way every time, you can put the code outside of the constructors. Java allows you to do:
You can also have all constructors other than the no-argument one call the no-argument constructor. For example:
另外,如果初始化很复杂并且您必须在构造期间执行此操作,请提供一个返回结果的静态方法,如下所示:
在这种情况下,
newLineValue()
很简单,因此我不会使用它在这里,但如果这实际上有大量的工作,那么它可能会有用。您还可以从构造函数传入参数。One more, if the initialization is complex and you must do it during construction, provide a static method the returns the result, as in:
In this case,
newLineValue()
is trivial so I wouldn't use it here, but if this actually had a significant amount of work then it could be useful. You can also pass in parameters from the constructor.