【问题标题】:Convert compile-time-constant int to compile-time-constant String in Java在 Java 中将 compile-time-constant int 转换为 compile-time-constant String
【发布时间】:2017-02-20 22:09:40
【问题描述】:

我有一个需要编译时常量字符串的注释,我想用我正在使用的库之一中的编译时常量 int 对其进行初始化。所以我最终做的是这样的:

public class LibraryClass {
    public static int CONSTANT_INT = 0; //Where 0 could be whatever
}

public class MyClass {
    private static final String CONSTANT_STRING = "" + LibraryClass.CONSTANT_INT;

    @AnnotationThatNeedsString(CONSTANT_STRING)
    public void myMethod() {
        //Do something
    }
}

我的问题是,有没有比使用"" + PRIMITIVE_TO_CONVERT 更好的方法将原语转换为编译时常量字符串?某种方式将原语“转换”为字符串?因为这样做感觉有点奇怪。

【问题讨论】:

    标签: java type-conversion compile-time-constant


    【解决方案1】:

    我认为您当前的解决方案是最好的,因为您正确地确定注释需要“编译时常量”值。 "" + INT_VALUE 至少比通过重复库中的值来创建冗余更好,但是作为字符串 ("23"),它是 Java 语言的一个“好”特性,可以将您的解决方案确定为编译时常量。

    如果可以的话,您当然也可以更改 Annotation 以将 int 作为值参数,正如另一个答案中所建议的那样(但我假设 Annotation 也来自库?)。

    【讨论】:

      【解决方案2】:

      建议

      • 使 @AnnotationThatNeedsString 采用 int 或
      • 将常量设为字符串。您可以在运行时将其解析为 int。

      例如

      public static int CONSTANT_INT = Integer.parseInt(CONSTANT_STRING);
      

      【讨论】:

        【解决方案3】:

        尝试使用 String.valueOf(LibraryClass.CONSTANT_INT);

        【讨论】:

        • 但是不能直接在注解中使用,只能在CONSTANT_STRING初始化中使用。
        • 是“私有静态最终字符串 CONSTANT_STRING = String.valueOf(LibraryClass.CONSTANT_INT);”不适用?
        • 是的,这将起作用并且是正确的答案。但我认为问题创建者要求类似@AnnotationThatNeedsString(someCleverCastOf(CONSTANT_INT))。
        • 不,我必须纠正自己。 String 不再是编译时常量,因此您的解决方案将不起作用 - 您不能在注释中使用该常量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-21
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        相关资源
        最近更新 更多