为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2022-09-07 21:48:18
在开发过程中,我有时会编写仍然具有实验状态的类或方法。我想声明这些类,以便我可以直接在代码中看到它们。整个事情应该像.只有相反的含义。@Deprecated据我所知,Java中没有这样的声明。还是?如果没有:我该如何实现此功能?
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

对于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中看到的,当我搜索可能实现的库时,可能已经实现了实验

//img1.sycdn.imooc.com//6318a15f000187e818180748.jpg

有一个用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 {

}


查看完整回答
反对 回复 2022-09-07
?
杨魅力

TA贡献1811条经验 获得超6个赞

您最好要么实现自己的注释,要么找到合适的第三方等效项...具有适当的范围。

在 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 Haglin


1 - ....但我可能是错的。


查看完整回答
反对 回复 2022-09-07
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号