相关疑难解决方法(0)

如何从Java中的常量为注释提供枚举值

我无法使用从常量中取得的枚举作为注释中的参数.我得到这个编译错误:"注释属性[attribute]的值必须是枚举常量表达式".

这是Enum代码的简化版本:

public enum MyEnum {
    APPLE, ORANGE
}
Run Code Online (Sandbox Code Playgroud)

对于注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface MyAnnotation {
    String theString();

    int theInt();

    MyEnum theEnum();
}
Run Code Online (Sandbox Code Playgroud)

和班级:

public class Sample {
    public static final String STRING_CONSTANT = "hello";
    public static final int INT_CONSTANT = 1;
    public static final MyEnum MYENUM_CONSTANT = MyEnum.APPLE;

    @MyAnnotation(theEnum = MyEnum.APPLE, theInt = 1, theString = "hello")
    public void methodA() {

    }

    @MyAnnotation(theEnum = MYENUM_CONSTANT, theInt = INT_CONSTANT, theString = STRING_CONSTANT)
    public void methodB() {

    }

} …
Run Code Online (Sandbox Code Playgroud)

java enums annotations

65
推荐指数
4
解决办法
5万
查看次数

Java无法将枚举用作注释的String参数(例如:Jackson)

我正在编写使用Jackson进行JSON序列化的Java代码.我必须在我的类之前使用的一个注释,@JsonTypeName(/*Insert string here*/)以便为该类的对象提供序列化的唯一标识符.在我当前的代码中,我们通过使用来自另一个类的全局常量来设置String参数.例:

public class AnnotationValues {
    private static final String id1 = "1";
    private static final String id2 = "2";
    private static final String id3 = "3";
    // And so on...
}
Run Code Online (Sandbox Code Playgroud)

使用这个类,我们的注释看起来像@JsonTypeName(AnnotationValues.id1).我个人并不认为这是一种非常强大的编码风格,要使用一类全局String常量.一旦我的应用程序需要处理大量的JSON消息并因此需要许多不同的标识符,这将变得很烦人.我自然会通过使用一个来解决这个问题enum.我会用以下代码替换该类:

public enum AnnotationValues {
    ID1("1"),
    STATS_RESPONSE("2"),
    SESSION_RESPONSE("3"),
    /* Add more... */;
    public final String value;
    private AnnotationValues(String value) {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这个枚举,我想写作@JsonTypeName(AnnotationsValues.ID1.value)我的注释.但这不起作用.我收到此错误消息:"注释属性JsonTypeName.value的值必须是常量表达式".一个简单的谷歌/ SOF搜索引导我到这个SOF帖子告诉我为什么这是一个错误; 注释参数的String值必须是常量.非常讨厌,我不能使用enum.

有没有其他人遇到这个问题?这类问题的解决方案是什么?我真的应该为我的注释使用一长串String常量吗?有什么方法可以用我的枚举来打捞吗?还要别的吗?

java string enums annotations jackson

10
推荐指数
1
解决办法
2169
查看次数

Java Annotation - Objects或toString值的数组

我需要编写一个Annotation来从结果集中排除某些值.

背景:

从字段中选择不同的值,并在ComboBox中列出.一些遗留值是Deprecated,我不想显示它们,即使它们是由JDBC返回的SELECT DISTINCT().它就像一个迷你框架,人们可以通过单击ComboBoxes中的值来构建选择查询.

我尝试了以下(代码不编译 - 注释行是我尝试解决问题的方法):

public enum JobType {
    //...
    S,
    //...
}

public @interface Exclude {
    Object[] values(); // Invalid type
    Enum[] values(); // Invalid type again
    String[] values(); // Accepts but see the following lines
}

@Table(name = "jobs_view")
public class JobSelectionView extends View {
    //...
    @Exclude(values = {JobType.S.toString()}) // Not a constant expression
    @Exclude(values = {JobType.S.name()}) // Not a constant expression ?!?!?!
    @Exclude(values = {"S"}) // Works but... come on!
    @Enumerated(value = EnumType.STRING) …
Run Code Online (Sandbox Code Playgroud)

java annotations coding-style

9
推荐指数
1
解决办法
1250
查看次数

JPA/HIBERNATE:值必须是常量

我有以下情况.

public enum TestEnum{

    PUUNITONE("puunitone"),
    PUUNITTWO("puunittwo");

    private String name;

    private TestEnum(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

}
Run Code Online (Sandbox Code Playgroud)

EJB @stateless课堂上

@PersistenceContext(unitName = TestEnum.PUUNITONE.getName())
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)

我有以下内容

Compilation Error: Value must be a constant
Run Code Online (Sandbox Code Playgroud)

现在我的问题:

1.在java中是不是枚举常量?如果是,这里的问题是什么?
2.使用Enum作为常量来解决这个问题还有办法或工作方法吗?

非常感谢任何建议

java enums hibernate jpa java-ee

3
推荐指数
1
解决办法
537
查看次数

标签 统计

java ×4

annotations ×3

enums ×3

coding-style ×1

hibernate ×1

jackson ×1

java-ee ×1

jpa ×1

string ×1