annotations 哪些类型可以用于Java注释成员?





2 Answers

我同意Skaffman提供的类型。

其他限制:它必须是编译时常量

例如,以下是禁止的:

@MyAnnot("a" + myConstantStringMethod())
@MyAnnot(1 + myConstantIntMethod())
java annotations

今天,我想创建我的第一个注释接口,按照这个文档 ,我得到了编译器错误“注释成员的无效类型”:

public @interface MyAnnotation {
    Object myParameter;
    ^^^^^^
}

显然, Object不能用作注释成员的类型。 不幸的是,我找不到关于哪种类型可以用于一般的任何信息。

我发现使用试错法:

String -->有效

int -->有效

Integer -->无效(令人惊讶)

String[] -->有效(令人惊讶)

Object -->无效

也许有人可以对实际允许哪些类型以及原因进行说明。




注释的概念非常适合我的项目设计,直到我意识到注释中不能包含复杂的数据类型。 我通过使用我想要实例化的类而不是该类的实例化对象来解决这个问题。 这并不完美,但Java很少。

@interface Decorated { Class<? extends PropertyDecorator> decorator() }

interface PropertyDecorator { String decorate(String value) }

class TitleCaseDecorator implements PropertyDecorator {
    String decorate(String value)
}

class Person {
    @Decorated(decorator = TitleCaseDecorator.class)
    String name
}



Related