DD 和 DU 功能异常
DD and DU anomalys in function
我最近开始使用 PMD 来保持我的代码干净,并且一直很顺利,但是我 运行 在以下函数中遇到了一些问题。
private final void readFile() throws Exception{
code.clear();
imports.clear();
//DD anomaly
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String line;
//DU anomaly
boolean code_started = false;
//DU anomaly
while((line = bufferedReader.readLine()) != null){
if(code_started) code.add(line);
else{
if(lineIsImport(line))
imports.add(line);
else if(lineIsClassDeclaretion(line)){
code_started = true;
code.add(line);
}
}
}
}
catch(FileNotFoundException fn_ex){
throw new Exception("File not found!");
}
catch(IOException io_ex){
throw new Exception("Failed to read file: " + file.getName() + "!");
}
finally{
try{
if(bufferedReader != null)
bufferedReader.close();
if(fileReader != null)
fileReader.close();
}
catch(IOException io_ex){
throw new Exception("Failed to close reader");
}
}
}
第一个DD异常:
FileReader fileReader = null;
BufferedReader bufferedReader = null;
如果我没有将两者都设置为 null,异常现象就会消失,但我在 finally 块中遇到错误。我不知道正确的写法应该是什么。
接下来是DU异常:
boolean code_started = false;
如果我不设置变量,异常现象就会消失,但在几行之后又会出现错误。
最后一个是DU异常:
while((line = bufferedReader.readLine()) != null)
这个异常可能与上面的异常相同,但我还是不知道如何修复它。
如果有人可以解释或展示如何以不会导致 PMD 显示异常的方式编写此函数,我将不胜感激。
如果您使用的是 Java 7 或更高版本,您可以尝试使用资源。 try-with-resources 语句确保在语句结束时关闭每个资源。下面是如何使用它的示例。
浏览:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 了解更多信息。
File file = null;
//Automatically closes resources try-with-resources block
try( FileReader fileReader = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(fileReader);){
String line;
boolean code_started = false;
while((line = bufferedReader.readLine()) != null){
//Code Goes Here
}
}catch(FileNotFoundException fn_ex){
throw new Exception("File not found!");
}
catch(IOException io_ex){
throw new Exception("Failed to read file: " + file.getName() + "!");
}
我最近开始使用 PMD 来保持我的代码干净,并且一直很顺利,但是我 运行 在以下函数中遇到了一些问题。
private final void readFile() throws Exception{
code.clear();
imports.clear();
//DD anomaly
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String line;
//DU anomaly
boolean code_started = false;
//DU anomaly
while((line = bufferedReader.readLine()) != null){
if(code_started) code.add(line);
else{
if(lineIsImport(line))
imports.add(line);
else if(lineIsClassDeclaretion(line)){
code_started = true;
code.add(line);
}
}
}
}
catch(FileNotFoundException fn_ex){
throw new Exception("File not found!");
}
catch(IOException io_ex){
throw new Exception("Failed to read file: " + file.getName() + "!");
}
finally{
try{
if(bufferedReader != null)
bufferedReader.close();
if(fileReader != null)
fileReader.close();
}
catch(IOException io_ex){
throw new Exception("Failed to close reader");
}
}
}
第一个DD异常:
FileReader fileReader = null;
BufferedReader bufferedReader = null;
如果我没有将两者都设置为 null,异常现象就会消失,但我在 finally 块中遇到错误。我不知道正确的写法应该是什么。
接下来是DU异常:
boolean code_started = false;
如果我不设置变量,异常现象就会消失,但在几行之后又会出现错误。
最后一个是DU异常:
while((line = bufferedReader.readLine()) != null)
这个异常可能与上面的异常相同,但我还是不知道如何修复它。
如果有人可以解释或展示如何以不会导致 PMD 显示异常的方式编写此函数,我将不胜感激。
如果您使用的是 Java 7 或更高版本,您可以尝试使用资源。 try-with-resources 语句确保在语句结束时关闭每个资源。下面是如何使用它的示例。
浏览:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 了解更多信息。
File file = null;
//Automatically closes resources try-with-resources block
try( FileReader fileReader = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(fileReader);){
String line;
boolean code_started = false;
while((line = bufferedReader.readLine()) != null){
//Code Goes Here
}
}catch(FileNotFoundException fn_ex){
throw new Exception("File not found!");
}
catch(IOException io_ex){
throw new Exception("Failed to read file: " + file.getName() + "!");
}