Java 将final字段与几个共享代码的构造函数一起使用
我需要从一个字符串中设置一些最终字段,本质上,对它们应用一些正则表达式并不重要。不同的构造函数以不同的方式获取该字符串,因此构造函数如下所示Java 将final字段与几个共享代码的构造函数一起使用,java,constructor,Java,Constructor,我需要从一个字符串中设置一些最终字段,本质上,对它们应用一些正则表达式并不重要。不同的构造函数以不同的方式获取该字符串,因此构造函数如下所示 public Foo(File file, Dog dog, ...) { String importantString; //do some stuff to get importantString setFinalFieldsFromString(importantString); } 显然,这不起作用,因为不能在
public Foo(File file, Dog dog, ...)
{
String importantString;
//do some stuff to get importantString
setFinalFieldsFromString(importantString);
}
显然,这不起作用,因为不能在构造函数之外设置最终字段。所以我看到了两个不太令人满意的解决方案
从字段中删除最终结果
从setFinalFieldsFromString复制并粘贴代码
有没有更好的办法
备注:由于共享代码不在构造函数的开头,我无法从另一个构造函数调用一个构造函数。使用一个将完成最终字段赋值的构造函数。所有其他构造函数都将使用此函数调用该构造函数,例如:
getImportantString是必需的,因为在此调用之前,您不能在构造函数中执行任何操作,而且它需要是静态的,以便从构造函数中工作。使用将执行最终字段赋值的。所有其他构造函数都将使用此函数调用该构造函数,例如:
getImportantString是必需的,因为在此调用之前,您无法在构造函数中执行任何操作,而且它需要是静态的,才能从构造函数中工作。向我们展示其他构造函数。因此,如果在您完成对这些字段的操作后需要设置这些字段,为什么它们是最终的?@nbokmans我没有对这些字段执行操作,但是为了找到用于派生它们的重要字符串。@krzyk所有构造函数都是用不同的参数和不同的方法来寻找它们的。@krzyk你能发布一个没有修订的代码实例吗?我无法理解你在帖子中提出的问题。向我们展示其他构造函数。那么,如果在你完成对这些字段的操作后需要设置这些字段,为什么它们是最终的?@nbokmans我没有对这些字段进行操作,但是为了找到用于派生它们的重要字符串。@krzyk所有构造函数都是用不同的参数和不同的方法来寻找它们的。@krzyk你能发布一个没有修订的代码实例吗?我无法理解你在帖子中提出的问题。基本上,主构造函数是最终的设置者。那是真的!是的,它是一个setFinalFieldsFromString:基本上,主构造函数是最终的setter。那是真的!是,它是一个setFinalFieldsFromString:
public Foo(File file, Dog dog, ...)
this(file, dog, getImportantString());
}