7

我的意思是,可以使用已弃用的代码样式创建像 @deprecated 这样的注释吗?

我想创建一个注释以指示从通信协议中删除了一些消息,所以我不想使用已弃用的注释,因为我想要 1) 为我的注释提供一个更好、更具暗示性的名称,例如“消息删除” 2) 为我的注释提供参数,例如 (protocol = 5) - 从协议 5 开始删除。

但是,我想保留此删除线代码,以便其他人知道仅通过查看代码就已删除此消息。

4

5 回答 5

5

@Deprecated 注解是为开发环境设计的(通常但不仅如此)。它本身什么也不做。但是对于 IDE,它是某种标记,当它“看到”该注释时 - 它会执行一些逻辑(例如“删除”代码)。我的帖子的目标是告诉开发和使用注释是不够的:它必须由环境支持。

于 2013-10-03T12:32:50.080 回答
2

你可以做两件事:

给方法添加 @Deprecated注解,给方法 @deprecated的javadoc添加标签

你应该两者都做!

引用有关此主题的 java 文档:

从 J2SE 5.0 开始,您可以使用@Deprecated注解来弃用类、方法或字段。此外,您可以使用@deprecated Javadoc 标记告诉开发人员改用什么。

使用注释会导致 Java 编译器在使用已弃用的类、方法或字段时生成警告。如果不推荐使用的编译单元使用不推荐使用的类、方法或字段,编译器会抑制不推荐使用的警告。这使您能够构建旧版 API 而不会生成警告。

强烈建议您使用@deprecated带有解释如何使用新 API 的适当注释的 Javadoc 标记。这可确保开发人员拥有从旧 API 到新 API 的可行迁移路径

于 2013-10-03T12:38:00.283 回答
1

在查看Deprecated annotation 的源代码时,您会发现没有任何具体内容使其带有删除线。使用删除线标记@Deprecated 代码是 IDE 的一项功能。

这里是:

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}
于 2013-10-03T12:29:45.857 回答
0

Mayur Gupta,

I created a annotation MessageRemoved:

public @interface MessageRemoved {
    Protocol protocol();
}

And a Enum:

public enum Protocol {
    P01, P02, P03, P04, P05
}

Using a Annotation:

@MessageRemoved(protocol = Protocol.P05)
public class OldMessage extends Message{
}

This facilitates the traceability of messages removed. Using only annotation @Deprecated this is not possible.

于 2013-10-03T13:12:53.233 回答
0

+1 for oleg.lukyrych's answer但你仍然可以做点什么。

创建您的注释(使用您想要的所有参数),然后将静态代码分析添加到您的构建过程。即带有自定义规则的PMD。PMD 广为人知,并很好地集成在各种 IDE 和持续构建环境中,如 hudson/jenkins。该分析将为您生成一份很好的报告,说明您已弃用的消息的(误)使用情况。

它不如将它放入您的编辑器中那么好,但它可以完成工作。

希望这可以帮助。

于 2013-10-03T15:00:57.917 回答