在Java中为什么会出现这个错误:'属性值必须是常量'?

dja*_*fan 15 java testng annotations constants

我有一些TestNG代码,我在其中传递一个名为的Test annotation参数timeOut = TESTNG_TEST_TIMEOUT.

@Test(description = "Tests something.", groups = { "regression" }, 
   timeOut = TESTNG_TEST_TIMEOUT, enabled = true)
Run Code Online (Sandbox Code Playgroud)

在我的TestBase类中,我有这个成员:

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);
Run Code Online (Sandbox Code Playgroud)

当我使用上面的代码行时,我在Eclipse中得到一个'属性值必须是常量'错误.

但是,如果我只是这样定义成员,它的工作原理是:

public final static long TESTNG_TEST_TIMEOUT = 300000;
Run Code Online (Sandbox Code Playgroud)

TimeUnit的使用不是常数吗?

Sot*_*lis 23

这个

public final static long TESTNG_TEST_TIMEOUT = 300000;
Run Code Online (Sandbox Code Playgroud)

是一个常量变量,一种常量表达式.

这个

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);
Run Code Online (Sandbox Code Playgroud)

不是.

注释成员期望常量表达式(以及一些其他的东西,如枚举和Class文字).

  • 感谢您的超链接.我可以看到doc说一个常量必须是一个原语或一个预先声明的String.谢谢. (3认同)
  • @java 事实上,确实如此。 (2认同)
  • 仅供参考,`public static final Long TESTING_TEST_TIMEOUT = 300000L;` 也不是常量值,请改用原始值 `long` (2认同)