Java 注释中特定于平台的换行符
我想在annotation元素中提供的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()替换?时,我得到编译错误属性值必须是常量。有什么想
字符串中使用平台特定的换行符
我应该在下面使用什么来代替?
@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”可能在任何地方都可以运行。在我的情况下,后处理是最简单的解决方案,因为我拥有此注释。谢谢你和欧文的提示!