gpt4 book ai didi

java - 数组常量(字段)作为注释值

转载 作者:行者123 更新时间:2023-11-30 08:12:53 26 4
gpt4 key购买 nike

虽然这段代码可以顺利编译(使用 Java 8/Eclipse 编译器)

public @interface specialized
{
public Class[] value() default { int.class, long.class, float.class, double.class };
}

将其重构为使用常量而不是数组会导致错误:

public @interface specialized
{
public static final Class[] COMMONS = { int.class, long.class, float.class, double.class };

public Class[] value() default COMMONS;
// ^ The value for annotation attribute specialized.value must be a class literal
}

我知道注释值和-defaults 必须是编译时常量,但是尽管COMMONS 数组在技术上是 是编译时常量,为什么这段代码导致错误?就个人而言,我认为这是非常违反直觉的,因为编译器简单地内联这个数组实际上并没有太大的痛苦。

我刚刚意识到它们(不出所料)也不能用作注释,而它们在 Scala 中的两种情况下都有效。

最佳答案

COMMONS 是一个数组,因此不是 compile-time constant .只有字符串和原语可以成为编译时常量表达式的一部分。您必须考虑 static final 数组仍然是可变的。

示例中的默认值不是标准数组,它是一种特殊的语言构造,称为 ElementValueArrayInitializer ( JLS 9.7.1 )。

关于java - 数组常量(字段)作为注释值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224689/

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