Lombok - 值可能尚未初始化
Lombok - value might not have been initialized
我正在使用 Lombok(我安装了插件并且还重新启动了 IDE),但是我收到了一个奇怪的错误。这是我的代码:
@RequiredArgsConstructor
@Slf4j
@Service
@Profile("parser")
public class ParserExecutorService implements CommandLineRunner {
@Value("${input.directory}")
String inputDirectory;
@Override
public void run(String... args) throws Exception {
getLogFiles();
}
public void getLogFiles() {
File inputDirectory = new File(inputDirectory);
最后一行报错:
Value 'inputDirectory' might not have been initialized
然而,当我提供一个普通字符串时,即:
File inputDirectory = new File("c:/temp");
然后我在其下方打印“inputDirectory”,然后在控制台中以正确的值显示它。
那么,到底为什么在使用这个 属性 时会抛出这个错误?
我尝试将其设置为
private final String inputDirectory;
但也无济于事。
这与 lombok 无关。
File inputDirectory = new File(inputDirectory);
无论您如何分割,该行都是错误的。 new File(inputDirectory)
中的 inputDirectory
是对您在此行中声明的 inputDirectory
变量的引用。显然,还没有初始化。
因此,lombok与此无关。
修复?简单 - 使用另一个名称,因为这会造成混淆。或者: File inputDirectory = new File(this.inputDirectory);
- 消除歧义,确保 javac 理解 inputDirectory
的第二个用法是指字段,而第一个是指 'please make me a new local variable named inputDirectory that shadows the field also named inputDirectory'.
我正在使用 Lombok(我安装了插件并且还重新启动了 IDE),但是我收到了一个奇怪的错误。这是我的代码:
@RequiredArgsConstructor
@Slf4j
@Service
@Profile("parser")
public class ParserExecutorService implements CommandLineRunner {
@Value("${input.directory}")
String inputDirectory;
@Override
public void run(String... args) throws Exception {
getLogFiles();
}
public void getLogFiles() {
File inputDirectory = new File(inputDirectory);
最后一行报错:
Value 'inputDirectory' might not have been initialized
然而,当我提供一个普通字符串时,即:
File inputDirectory = new File("c:/temp");
然后我在其下方打印“inputDirectory”,然后在控制台中以正确的值显示它。
那么,到底为什么在使用这个 属性 时会抛出这个错误?
我尝试将其设置为
private final String inputDirectory;
但也无济于事。
这与 lombok 无关。
File inputDirectory = new File(inputDirectory);
无论您如何分割,该行都是错误的。 new File(inputDirectory)
中的 inputDirectory
是对您在此行中声明的 inputDirectory
变量的引用。显然,还没有初始化。
因此,lombok与此无关。
修复?简单 - 使用另一个名称,因为这会造成混淆。或者: File inputDirectory = new File(this.inputDirectory);
- 消除歧义,确保 javac 理解 inputDirectory
的第二个用法是指字段,而第一个是指 'please make me a new local variable named inputDirectory that shadows the field also named inputDirectory'.