如何在Java中声明无法访问的代码?

如何在Java中声明无法访问的代码?,java,Java,我在switch语句中遇到了一个复杂的情况,当它发生时,总是以返回、中断或。。。。我想用lint的/*UNREACHABLE*/声明来向任何阅读代码的人表明,它不会落入下一个例子中,这是Java中的一个常见错误。我正在寻找一种更正式的方式来表明这一点,理想情况下,如果无法访问,就会导致编译器警告或错误。有什么想法吗 switch (x) { case 1: if (...) { switch (.) {

我在switch语句中遇到了一个复杂的情况,当它发生时,总是以返回、中断或。。。。我想用lint的/*UNREACHABLE*/声明来向任何阅读代码的人表明,它不会落入下一个例子中,这是Java中的一个常见错误。我正在寻找一种更正式的方式来表明这一点,理想情况下,如果无法访问,就会导致编译器警告或错误。有什么想法吗

    switch (x) {
        case 1:
           if (...) {
             switch (.) {
                ...
             }
           } else {
             ...
           }
           /*UNREACHABLE*/
        case 2:
           ...
    }

代码确实是不可访问的,Java编译器知道它是不可访问的,因此我不能将任何普通代码放在那里,因为编译器会将其标记为不可访问的代码。

如果您对恶意攻击持开放态度,您可以在有效代码之间插入未使用的代码:

switch (x) {
    case 1:
       if (...) {
         switch (.) {
            ...
         }
       } else {
         ...
       }
    case -1:
       /*UNREACHABLE*/
       throw new RuntimeException("nope");

    case 2:
       ...
}

就我个人而言,我不认为我会使用它,但它应该可以工作。

如果不应该访问它,您可以抛出一个异常。您可以创建自己的异常,并解释为什么代码不应该到达stacktrace中的那个点。也许会help@PaulLemarchande和@Erik:如果我在那里放了一个in-throw语句或任何其他语句,它会得到一个编译器错误,正如我在你的评论后澄清的那样。@JohnTangBoyland如果你把它变成一个。这是个坏主意;您的代码不应该如此混乱,以至于需要一个无法访问的标记。看到嵌套的开关和if-else块对我来说意味着。。。这应该使它更具可读性,这应该是您的目标。@Elliot Frisch:我认为您不理解编译器错误:甚至添加int x=3;将得到一个错误。Java编译器不允许在无法访问的情况下使用代码,例如在“return”语句之后。这确实回答了这个问题。@JohnTangBoyland:正如我前面提到的,我宁愿搜索linter。例如,我刚刚遇到了Lint4j,它说它会检查漏洞百出的案例陈述: