gpt4 book ai didi

java - 为 @Annotation 枚举分配一个值

转载 作者:太空狗 更新时间:2023-10-29 22:50:33 25 4
gpt4 key购买 nike

我创造

enum Restrictions{
none,
enumeration,
fractionDigits,
length,
maxExclusive,
maxInclusive,
maxLength,
minExclusive,
minInclusive,
minLength,
pattern,
totalDigits,
whiteSpace;

public Restrictions setValue(int value){
this.value = value;
return this;
}
public int value;
}

这样我就可以愉快地做这样的事情,这是完全合法的语法。

Restrictions r1 =
Restrictions.maxLength.setValue(64);

原因是,我正在使用枚举来限制可以使用的限制类型,并能够为该限制分配一个值

但是,我的实际动机是在@annotation 中使用该限制。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface Presentable {
Restrictions[] restrictions() default Restrictions.none;
}

因此,我打算这样做:

@Presentable(restrictions=Restrictions.maxLength.setValue(64))
public String userName;

编译器对它发出嘶哑的声音

The value for annotation enum attribute must be an enum constant expression.

有没有办法完成我想完成的事情

最佳答案

你可以这样做:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

class Person {
@Presentable({
@Restriction(type = RestrictionType.LENGTH, value = 5),
@Restriction(type = RestrictionType.FRACTION_DIGIT, value = 2)
})
public String name;
}

enum RestrictionType {
NONE, LENGTH, FRACTION_DIGIT;
}

@Retention(RetentionPolicy.RUNTIME)
@interface Restriction {
//The below fixes the compile error by changing type from String to RestrictionType
RestrictionType type() default RestrictionType.NONE;
int value() default 0;
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@interface Presentable {
Restriction[] value();
}

关于java - 为 @Annotation 枚举分配一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010993/

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