如果发送给构造函数的参数(String Path)不能是目录,如何强制编译器给我一个错误?
import java.io.File;
public class Folder {
protected File file;
public Folder(String Path){
file = new File(Path);
}
}
答案 0 :(得分:2)
你不能把它变成编译错误(除非你当然重写编译器,即便如此,我认为你不能在编译时确定字符串是否是一个有效的目录)。
在java中处理此问题的标准方法是抛出异常,例如:
if (isNotValid(path)) { //condition to be defined
throw new IllegalArgumentException(path + " is not a valid path");
}
答案 1 :(得分:0)
可能使用某种注释处理器。
但这是一个非常奇怪的要求。如果它是编译时的目录会发生什么,但它不是运行时?
答案 2 :(得分:0)
不能是目录在什么?在Windows中?在Linux中?
Java是跨平台的,每个平台都有自己的规范(例如,在Windows中你不能在目录名中使用*
,但在Linux中你可以......);
我认为您只需要在运行时从方法内部检查File类的isDirectory()方法。
答案 3 :(得分:0)
无法进行编译时错误。
但请考虑这种实施:
public class Folder {
private final File folder;
public Folder(String path) {
this(new File(path));
}
public Folder(File folder) {
if (!folder.exists() || !folder.isDirectory()) {
throw new IllegalArgumentException();
}
this.folder = folder;
}
// add useful methods possibly delegating to contained File object ...
}
这有效地防止了制作包含非目录文件的Folder对象。另请注意,我已将文件夹字段设置为私有,因此没有其他类可以篡改它。
答案 4 :(得分:0)
您可以通过使用自动单元测试来实现类似功能,该测试可在每个构建上运行。
首先,您需要验证Folder
构造函数中的参数,以便在路径无效时抛出Exception
。
然后编写单元测试,运行并测试所有代码。如果测试失败,则BUILD也会失败 - 项目的整个包装都会失败。 (例如,无法访问硬编码目录) 这非常类似于编译器错误,构建过程将失败。 (确定它不一样)
测试确保您测试的代码以所需的方式工作。
当然,如果您使用像maven这样的构建工具,这会更容易,其中单元测试会在每个构建中自动运行。