这个问题在这里已经有答案了:
变量未初始化并隐藏在字段中(4个答案)
为什么java在这里抛出nullpointerexception(5个答案)
12天前关门了。
我正在使用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;
但也没用。
1条答案
按热度按时间tjjdgumg1#
这与Lombok山毫无关系。
File inputDirectory = new File(inputDirectory);
这条线是一个错误,无论你如何切片。这个inputDirectory
在new File(inputDirectory)
是指inputDirectory
您在此行声明的变量。显然,还没有初始化。因此,Lombok山与此无关。
修复?简单-使用另一个名字,因为这是混淆。或者:
File inputDirectory = new File(this.inputDirectory);
-消除歧义,确保javac理解inputDirectory
是指字段,而第一个是指“请为我创建一个名为inputdirectory的新局部变量,该变量对字段(也称为inputdirectory)进行阴影处理”。