在我的例子中,我有一个类似于以下的类,Netbeans (8.2) 在文件中没有显示错误,但是在文件图标中它显示了解析文件的错误:
public class FileUploadUtil {
private static interface WriteToFile {
public void run(File file) throws IOException;
}
private static interface UseFile {
public void run(File file) throws IOException;
}
private static void createAndUseTempFile(InputStream is, UseFile use) throws IOException {
createAndUseTempFile((file) -> {
try (FileOutputStream fos = new FileOutputStream(file)) {
byte[] bytes = new byte[1024];
int read;
while ((read = is.read(bytes)) != -1) {
fos.write(bytes, 0, read);
}
fos.flush();
}
}, use, "tmp");
}
private static void createAndUseTempFile(Image image, UseFile use, String extension) throws IOException {
createAndUseTempFile((file) -> image.writeToFile(file), use);
}
private static void createAndUseTempFile(WriteToFile write, UseFile use, String extension) throws IOException {
File file = null;
try {
String key = System.currentTimeMillis() + "-" + SecurityUtil.generateUUID();
String suffix = (extension != null) ? ("." + extension) : null;
file = File.createTempFile(key, suffix);
write.run(file);
use.run(file);
} finally {
if (file != null) {
file.delete();
}
}
}
}
方法:
private static void createAndUseTempFile(Image image, UseFile use, String extension) throws IOException {
createAndUseTempFile((file) -> image.writeToFile(file), use);
}
应该是:
private static void createAndUseTempFile(Image image, UseFile use, String extension) throws IOException {
createAndUseTempFile((file) -> image.writeToFile(file), use, extension);
}
但 Netbeans 显示文件内没有错误,所以我尝试重新加载项目,重命名文件等。
然后我尝试用gradle编译并收到错误:
FileUploadUtil.java:95: error: incompatible types: InputStream is not a functional interface
然后我意识到它试图调用createAndUseTempFile(InputStream is, UseFile use)而不是createAndUseTempFile(WriteToFile write, UseFile use, String extension),但是因为InputStream不是一个功能接口,并且没有扩展/实现一个接口,该接口有一个接收File的方法,它不能调用那个方法(也不应该!)。
我认为在这种情况下这是一个 Netbeans 错误,因为它应该在该行中显示错误。