如何在java中编写自己的编译错误?

时间:2012-12-31 10:33:07

标签: java

如果发送给构造函数的参数(String Path)不能是目录,如何强制编译器给我一个错误?

import java.io.File;
public class Folder {

    protected File file;

    public Folder(String Path){
    file = new File(Path);
    }
}

5 个答案:

答案 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这样的构建工具,这会更容易,其中单元测试会在每个构建中自动运行。