链接异常是有效的

Dav*_*veM 2 java exception-handling

在测试类时,我发现我的类构造函数可以采取"非法参数".构造函数期待一个URI.显然,如果没有任何迹象表明传递的参数是一个URI,那么它会抛出一个IllegalArgumentException.

我的构造函数最初测试了传递的参数,看它是否是一个有效的URI(通过从中创建一个文件).然后我修改了这个以尝试创建文件并捕获IllegalArgumentException.在我的catch块体中,我只是这样做:

throw new URISyntaxException(passedArgument, message)
Run Code Online (Sandbox Code Playgroud)

这是捕获可能引发的异常的有效方法,还是应该以其他方式执行?

另外,当我在测试时发现这个问题时,我是否有理由简单地修改代码以抛出我期望的异常(哪个更明显的错误呈现给用户,并放入日志中)?

编辑1:在回复评论时,这是我的代码示例:

public myClass (String fileName) throws URISyntaxException {
    try {
        fileToRead = new File(fileName);

        if ( !fileToRead.canRead() ) { //confirm we can read the passed file
            // if not, throw a URI error
            throw new URISyntaxException(fileName, 'bad filename passed, please check path and try again');
        }
    } catch ( IllegalArgumentException e ) {
        throw new URISyntaxException(fileName, 'bad filename passed, please check path and try again');
    }
}
Run Code Online (Sandbox Code Playgroud)

本质上我的问题是,在catch块的内部抛出URI异常是否有效IllegalArgumentException?这是一种有效的做法,还是我能做得更好?

Ale*_*sky 5

是的,它既有效又是最佳实践,但你应该抛出一个自定义异常或IllegalArgumentException,说构造函数参数是错误的,而不是UriException