gpt4 book ai didi

java - 使用 Java 8 有没有办法验证/断言常量是编译时常量?

转载 作者:行者123 更新时间:2023-12-01 17:45:19 24 4
gpt4 key购买 nike

我想要一个 JUnit 测试来验证特定常量是否为编译时常量。我该如何去做呢?

我找到了 Scala 的解决方案,但我想要纯 Java 的解决方案。
Is there a way to test at compile-time that a constant is a compile-time constant?

根本原因:

注释属性 ApiModelProperty.allowableValues 的值必须是常量表达式

我想在单元测试中得到什么:
    validateCompileTimeConstant(SomeClass.CONSTANT_VALUE, "Message Here!!");
用法
    @ApiModelProperty(name = "name", required = true, value = "Name", allowableValues=SomeClass.API_ALLOWABLE_VALUES, notes=SomeClass.API_NOTES)
private String name;
某类
public enum SomeClass {
BOB(4, "Bob"),//
TED(9, "Ted"),//
NED(13, "Ned");

public static final String API_ALLOWABLE_VALUES = "4,9,13,16,21,26,27,170";
public static final String API_NOTES = "4 - Bob\n" +
"9 - Ted\n" +
"13 - Ned";

public int code;
public String desc;

private ContentCategoryCode(int code, String desc) {
this.code = code;
this.desc = desc;
}

public static final String apiAllowableValues() {
StringBuilder b = new StringBuilder();
for (ContentCategoryCode catCode : values()) {
b.append(catCode.code);
b.append(',');
}
b.setLength(b.length()-1);
return b.toString();
}

public static final String apiNotes() {
StringBuilder b = new StringBuilder();
for (ContentCategoryCode catCode : values()) {
b.append(catCode.code).append(" - ").append(catCode.desc);
b.append('\n');
}
b.setLength(b.length()-1);
return b.toString();
}
}

最佳答案

Error Prone项目有一个 @CompileTimeConstant 注释,可用于强制执行此操作。

这不是使用 JUnit 运行的测试,而是在编译时强制执行此测试(以及其他错误模式)的编译器插件。

这里是文档:https://errorprone.info/bugpattern/CompileTimeConstant

关于java - 使用 Java 8 有没有办法验证/断言常量是编译时常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064390/

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