Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释中特定于平台的换行符_Java_Annotations_Newline - Fatal编程技术网

Java 注释中特定于平台的换行符

Java 注释中特定于平台的换行符,java,annotations,newline,Java,Annotations,Newline,我想在annotation元素中提供的字符串中使用平台特定的换行符 我应该在下面使用什么来代替? @Scenario(title = "This text should match multiline text from file stored on disk " + ??? + "saved with platform specific newline character") 当我用System.lineSeparator()替换?时,我得到编译错误属性值必须是常量。有什么想

我想在annotation元素中提供的
字符串中使用平台特定的换行符

我应该在下面使用什么来代替

@Scenario(title = "This text should match multiline text from file stored on disk " + ???
        + "saved with platform specific newline character")

当我用
System.lineSeparator()
替换
时,我得到编译错误
属性值必须是常量。有什么想法吗?

不可能。注释参数值必须是编译时常量。你得到的错误也说明了这一点

根据定义,依赖于平台的值不是编译时常量,因为它应该根据运行它的平台而有所不同。因此,它不能是注释参数值的一部分


您可以在输出参数值的地方进行转换,将每个
\n
替换为
System.lineSeparator()

不可能将非常量值用作注释的属性。交给批注的字符串必须是字符串

在类文件中,注释属性作为元数据与注释的声明直接存储在一起。根据概念,属性因此不能在运行时解析,因为解析依赖于运行时的属性是必需的


或者,您应该对注释的属性进行后期处理,例如,只需将字符串的换行符替换为运行时的
System.getProperty(“line.separator”)
值。

您可以做的是引入一个常量表达式:

private static final String LINE_SEPARATOR = "\n";
并在注释中使用它:

@Scenario(title = "This text should match multiline text from file stored on disk "
                + LINE_SEPARATOR
                + "saved with platform specific newline character")
但是,
LINE\u SEPARATOR
本身需要是一个常量,不能使用
System.lineSeparator()
初始化。至少它可以让您一次在所有注释中更改行分隔符变得更容易


或者,您可以更改注释以接受线阵列:

public @interface Scenario {
  String[] titleLines();
}
并加上以下注释:

@Scenario(titleLines = {"This text should match multiline text from file stored on disk ",
                        "saved with platform specific newline character" })

然后,您可以根据需要在使用注释的代码中插入一个行分隔符。

Java只知道要执行此操作的格式字符串:
string.format(“%n”)
。因此,如果注释以某种方式传递给格式化程序,则可以尝试这样做。机会渺茫


否则,Windows的“\r\n”可能在任何地方都可以运行。

在我的情况下,后处理是最简单的解决方案,因为我拥有此注释。谢谢你和欧文的提示!