有没有办法在Java中将类/方法声明为实验性?

在开发过程中,我有时会编写仍然具有实验状态的类或方法。我想声明这些类,以便我可以直接在代码中看到它们。整个事情应该像.只有相反的含义。@Deprecated

据我所知,Java中没有这样的声明。还是?如果没有:我该如何实现此功能?


慕田峪4524236
浏览 150回答 2
2回答

catspeake

对于Java 1.6 +(不确定1.5),您可以使用自己的自定义注释,这里有一个您可以使用的功能模板:package com.mycompany.annotations;import java.lang.annotation.*;/** * * This element has an experimental maturity.  Use with caution. * * * NOTE: The developers of this element is not responsible for the issues created, * using it is not suggested for production environment. If you see this annotation do this, do not do that etc * Enjoy responsibly.... */@Documented //this annotation maybe helpful for your custom annotation@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,        ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE, ElementType.PACKAGE,         ElementType.ANNOTATION_TYPE, ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})public @interface Experimental {}这里是 的源代码,所以大家可能都不想使用元素ElementTypeElementType.TYPE_USE, ElementType.TYPE_PARAMETER    /*    ....        * @since 1.5        * @jls 9.6.4.1 @Target        * @jls 4.1 The Kinds of Types and Values        */public enum ElementType {/** Class, interface (including annotation type), or enum declaration */TYPE,/** Field declaration (includes enum constants) */FIELD,/** Method declaration */METHOD,/** Formal parameter declaration */PARAMETER,/** Constructor declaration */CONSTRUCTOR,/** Local variable declaration */LOCAL_VARIABLE,/** Annotation type declaration */ANNOTATION_TYPE,/** Package declaration */PACKAGE,/** * Type parameter declaration * * @since 1.8 */TYPE_PARAMETER,/** * Use of a type * * @since 1.8 */   TYPE_USE}顺便说一句,这是我从我的IntelliJ中看到的,当我搜索可能实现的库时,可能已经实现了实验有一个用Java 9定义的注释。但请注意,它是在Oracle JDK中,而不是OpenJDK中。在撰写本文时,您需要从官方网站安装jdk-11才能查看/使用它。我不会把它用于这个目的,因为斯蒂芬C.列出的事实。Experimental无论如何,您都不能将其用于方法。因为它的源代码是... package jdk.jfr;/* ... * * @since 9 */@MetadataDefinition@Label("Experimental")@Description("Element is not to be shown to a user by default")@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.FIELD, ElementType.TYPE })public @interface Experimental {}

杨魅力

您最好要么实现自己的注释,要么找到合适的第三方等效项...具有适当的范围。在 JDK 9+ 中有一个名为 .然而:jdk.jfr.Experimental在 Java 9 之前,它不包括在内。它可能只存在于支持Java Flight Recorder的Oracle Java实现中。注释的 javadoc 意味着它具有 JFR 特定的含义:指定元素是实验性的注释,可能会更改,恕不另行通知。默认情况下,可视化飞行记录器事件的客户端不应显示使用实验性批注注释的事件或字段。此注释允许事件创建者自由尝试新事件,而无需提交它们。因此...在具有非 JFR 含义的非 JFR 上下文中重用是不可取的。任何核心Java工具(除了JFR本身)或第三方工具都不太可能特别注意这个注释1。@jdk.jfr.Experimental此外,作者还评论道:@jdk.jfr.Experimental“我同意。注释是为飞行记录器准备的,不应在该上下文之外使用。(我是这门课的作者)“ – Kire Haglin1 - ....但我可能是错的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java