我在Java中使用多个构造函数时遇到麻烦。
我想做的是这样的:
public class MyClass { // first constructor public MyClass(arg1, arg2, arg3) { // do some construction } // second constructor public MyClass(arg1) { // do some stuff to calculate arg2 and arg3 this(arg1, arg2, arg3); } }
但是我不能,因为第二个构造函数不能调用另一个构造函数,除非它是第一行。
这种情况的常见解决方案是什么?我无法“在线”计算arg2和arg3。我以为也许可以创建一个构造助手方法来完成实际的构造,但是我不确定这是否“漂亮”……
编辑 :由于我的某些字段是最终的,因此使用辅助方法也是有问题的,我无法使用辅助方法进行设置。
通常,请使用另一种常见方法-如您所建议的“构造助手”。
public class MyClass { // first constructor public MyClass(arg1, arg2, arg3) { init(arg1, arg2, arg3); } // second constructor public MyClass(int arg1) { // do some stuff to calculate arg2 and arg3 init(arg1, arg2, arg3); } private init(int arg1, int arg2, int arg3) { // do some construction } }
另一种选择是一种工厂风格的方法,其中您有一个MyClassFactory为您提供MyClass实例的实例,并且MyClass只有一个构造函数:
MyClassFactory
MyClass
public class MyClass { // constructor public MyClass(arg1, arg2, arg3) { // do some construction } } public class MyClassFactory { public static MyClass MakeMyClass(arg1, arg2, arg3) { return new MyClass(arg1, arg2, arg3); } public static MyClass MakeMyClass(arg1) { // do some stuff to calculate arg2 and arg3 return new MyClass(arg1, arg2, arg3); } }
我绝对更喜欢第一种选择。