gpt4 book ai didi

java - 为什么不能在 Java 中对所有语句都进行注释?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:05 24 4
gpt4 key购买 nike

我在尝试这样做时天真地遇到了一个简单的问题:

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)型。

  1. 限制有效元素是否存在理论或技术原因?

  2. 是否可以采用不同的方式 - 即假设我可以用我自己的类替换 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com