Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将final字段与几个共享代码的构造函数一起使用_Java_Constructor - Fatal编程技术网

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());
}