我在尝试这样做时天真地遇到了一个简单的问题:
public void someMethod(){
int x = 0;
...
@SuppressWarnings({"rawtypes", "unchecked"})
x = ((Comparable)lhs).compareTo(rhs);
...
}
这是非法的,必须改写才能编译:
public void someMethod(){
...
@SuppressWarnings({"rawtypes", "unchecked"})
int x = ((Comparable)lhs).compareTo(rhs);
...
}
我已将问题追溯到 ElementType : 语句似乎不是有效的程序元素。这相当令人困惑——我认为语句类似于所有编程元素的父类(super class)型。
限制有效元素是否存在理论或技术原因?
是否可以采用不同的方式 - 即假设我可以用我自己的类替换
ElementType
并掌握涟漪变化,我可以注释任何语句吗?
最佳答案
如果你看the Javadoc for @SuppressWarnings
你会看到答案:它声明的目标是
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
换句话说,它不能合法地应用于语句。但是,它可以应用于变量声明。它与语句是否为程序元素无关;这基本上是因为此注释仅适用于事物的声明。
此外,如果您查看 the Javadoc for the enumeration that describes things that can have annotations,语句和表达式不在选项之列。通常,注释可以应用于事物的声明,而不是代码。
这样做的理论原因只是注释存储为类文件中声明的各个项目的属性。陈述不合格;当你的代码被编译时,语句已经不复存在了。只有一个字节码流,它来自的语句的唯一提示是(可选的)行号表。为了解决这个问题,他们需要向类文件添加一个新属性以引用各个字节码,如 this proposal, 中所示。并处理由此产生的许多复杂问题。
关于java - 为什么不能在 Java 中对所有语句都进行注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10981295/