gpt4 book ai didi

java - 为什么要用@interface来定义注解?

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

作为最终用户,我一直在 Java 中使用注解或有一段时间,但最近我决定研究创建自己的注解类型,我发现在 Java 中使用 @interface 定义注解的语法非常奇怪。我的问题是为什么 Java 使用 @interface 来定义注解而不是像它们为枚举那样引入新的关键字?我缺少的 @interface 语法有什么优势吗?

我很想了解注解设计者所经历的设计考虑,我相信他们一定考虑过引入新关键字来定义注解的想法。

@interface 有太多的限制,例如你不能使用 extend,在定义注解成员时有一些特定的类型你不能使用,比如 Date。我发现对可以进入@interface 的内容的限制并不明显,这对我来说就像一个 hack。

最佳答案

我不知道这种特殊情况的确切考虑因素,但总的来说:

将新关键字引入一种语言会破坏所有现有源代码的兼容性,这些源代码碰巧使用该特定关键字作为标识符。

现有的源代码不能用新的编译器版本编译,直到它被更改以避免关键字。这并非不可能克服(如 enum 案例所示),但它很尴尬并且迫使很多人做额外的工作。 Java 的设计者通常尝试在不破坏源代码兼容性的情况下引入新的语言特性。

对于您提到的 enum,我猜他们认为它是 (a) 其他 C 风格语言中的常见关键字,(b) 通常仅用作局部作用域现有代码中的标识符,因此很容易重构,并且 (c) 没有任何理智的替代方案。他们认为 yield 大于成本。对于注释案例,他们显然另有决定。

顺便说一句,您可能有兴趣观看 Josh Bloch's Effective API Design talk这涉及到很多这些考虑因素。

关于java - 为什么要用@interface来定义注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292355/

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