在Java中,Unreachable语句是一种错误而不是警告?

在Java中,Unreachable语句是一种错误而不是警告?,java,exception,Java,Exception,在getUsers方法中,它使用远程api服务调用RestTemplate。在代码中,我想模拟它抛出异常。然后我硬编码抛出新异常读取失败 我知道下面的代码“抛出”将无法访问。但我想这在Intellij idea中应该只是一个警告,就像VisualStuido在C中所做的一样。但这里是一个编译错误 有没有办法抑制这个编译错误?因为我想在这里模拟一个例外。谢谢 编辑: 谢谢大家!是的,我正在尝试插入一些临时调试代码,而不是生产代码。调试完成后,我将删除抛出代码 是的,不可访问代码是Java中的编译错

在getUsers方法中,它使用远程api服务调用RestTemplate。在代码中,我想模拟它抛出异常。然后我硬编码抛出新异常读取失败

我知道下面的代码“抛出”将无法访问。但我想这在Intellij idea中应该只是一个警告,就像VisualStuido在C中所做的一样。但这里是一个编译错误

有没有办法抑制这个编译错误?因为我想在这里模拟一个例外。谢谢

编辑: 谢谢大家!是的,我正在尝试插入一些临时调试代码,而不是生产代码。调试完成后,我将删除抛出代码


是的,不可访问代码是Java中的编译错误,而不仅仅是警告。代码检查不检查条件,因此您只需执行以下操作:

if (true)
  throw new MyException();
有没有办法抑制这个编译错误

不可以。您可以删除这7行或将其注释掉。异常是无条件抛出的,因此无法执行下面的代码


我强烈反对引入伪条件来欺骗编译器。您可以愚弄编译器,但不能愚弄在您之后将维护代码库的开发人员。

否,因为这是编译器错误-请使用类似的伪条件

if(true) {
    throw new Exception("read failed");
}

也可以考虑使用这种方法或一些虚构的模拟实现——然后你就可以创建适当的单元测试——这样的测试是相当糟糕的想法,将来不会帮助你想象每次添加一些这样的行,并且需要再次测试

误解:它是一个错误,这正是Java语言规范所希望的,请参见:

如果由于无法访问语句而无法执行该语句,则为编译时错误

你走错了方向:你不应该试图绕过这个警告。当您的生产代码必须抛出该异常时,让其他代码跟随在您的生产代码中抛出语句是没有意义的

如果您想进行某种模拟,那么所有这些都应该发生在您的测试代码库中

换句话说:为了使您能够测试catch块,您可以做的是:在try块中提取它自己的类中的部分。然后将该类的模拟实例传递给生产代码,并在对其调用方法时进行模拟抛出


有时,为了可测试性对生产代码进行细微的更改是实用的,例如使方法非私有,以允许在同一包中访问测试代码。但你的想法远远不止这些。所以:不要浪费你的时间去解决错误

所以,只要抛出那个异常,或者删除,或者注释掉所有其他代码首先,你应该以文本的形式共享代码,而不是图片的形式共享代码。我知道这对你来说更容易,但对我们来说不是。。。。第二,正如你提到的,你想要模拟REST模板,所以要模拟它,为什么你要修改你不想碰的代码…嗯,我一直认为编译器不会被这样的常量愚弄,但我刚刚检查了一下。在虚拟条件下抛出异常怎么可能是合理的呢?@AndrewTobilko-我的印象是OP插入了临时调试代码,而不是生产代码。@T.J.Crowder我的直觉是,它与生成有效的或更好的字节码有关。对于无条件块,您需要有一条athrow指令,该指令改变堆栈,然后是附加的不可调用指令。编译器应该如何处理这个问题?如果程序员自己插入了一个条件块,则无需遵循athrow指令,您可以使用另一个单独的路径,以return或_return结尾。因此,我不认为编译器被愚弄了,因为它默默地容忍了这种模式。在虚拟条件下抛出异常怎么可能是合理的呢?它不能,我扩展了我的答案