假设您有一些注释Annot
:
@Retenthtml" target="_blank">ion(/*your retention policy*/)
@Target(/*targeted element type*/)
public @interface Annot {
String value() default "Hello World!";
}
在一些相关的代码中,比如注释处理器,您需要value()
注释字段的默认值,而不需要访问用@Annot
注释的类。当然你可以这么做
public static final String ANNOT_VALUE_DEFAULT = "Hello World!";
在处理器类中,然后在@Annot
中更改以下内容:
String value() default Processor.ANNOT_VALUE_DEFAULT;
(Processor
是注释处理器的类名)。虽然这对String
s很好,但是当value()
类型是enum
时,@Annot
中的更改会失败。对于其他值,它可能也会失败,但是enum
是我的用例的一部分,因此如果这不起作用,其他类型是否起作用也无关紧要。
当然,现在解决这个问题的最简单方法是分别在@Annot
和处理器
中指定默认值。但每个程序员都知道,复制常量通常不是一个好主意。您可能希望自动将一个部分(例如@Annot
)中的更改反映在其他部分(例如处理器
)中。要想让它发挥作用,你必须做到:
var defaultVal = Annot.value(); // statically (without an instance annotated with @Annot) access default value
那么,这种静态访问有可能吗?
我现在并不迫切需要找到一个解决方案,因为我已经找到了一个半方便的变通方法(见我的答案)。尽管如此,因为变通方法有点“hacky”,我想知道是否有更优雅的方法来做到这一点。
如果事实证明没有令人满意的解决方案,但是读者真的需要一个解决方案,看看这个变通方法:
所以,问题是您想访问默认值,而不需要提供一个注释为@Annot
的类。谁说您不能访问这样的类?只需将这个(最好是包私有)类添加到源代码中:
@Annot
class DefaultAnnotValues {
private static final Annot ANNOT = DefaultAnnotValue.class.getAnnotation(Annot.class);
static SomeEnum value = ANNOT.value();
// add all other enum fields with default values here
private DefaultAnnotValues() {
}
}
现在,您可以访问注释的所有默认值,当您更改注释定义中的默认值时,它将自动反映到使用这些默认值的任何位置。
这将打印a.a=50 但是,如果我将更改为,那么我可以如何访问该变量呢?
Kotlin中的注释可以有不同的使用站点目标,如下所述:https://kotlinlang.org/docs/reference/annotations.html#annotation-使用站点目标 我的问题是:如果没有明确定义use-site,那么在类中注释属性时的默认目标是什么? 背景 我尝试用Jongo作为Kotlin中的MongoDB客户端,但在注释id字段时遇到了问题。Jongo不能正
css中注释的作用包括帮助你组织样式、以后你看自己的代码时明白为什么这样写,以及简单的样式说明。但是,你并不希望每个浏览网站源码的人都能看到所有注释。 sass另外提供了一种不同于css标准注释格式/* ... */的注释语法,即静默注释,其内容不会出现在生成的css文件中。静默注释的语法跟JavaScriptJava等类C的语言中单行注释的语法相同,它们以//开头,注释内容直到行末。 body
我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode
当我注意到现在可以在接口中定义静态和默认方法时,我正在通过接口学习。 请解释两者的区别,如果有一个我们什么时候会使用它的例子,那就好了。界面上有点混乱。
为什么会这样?我的意思是,访问私有变量。