В Java почему эта ошибка: "значение атрибута должно быть постоянным"?


У меня есть некоторый код TestNG, где я передаю параметр аннотации теста под названием timeOut = TESTNG_TEST_TIMEOUT .

@Test(description = "Tests something.", groups = { "regression" }, 
   timeOut = TESTNG_TEST_TIMEOUT, enabled = true)

И в моем классе TestBase у меня есть этот член:

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);

Когда я использую приведенную выше строку кода, я получаю ошибку "значение атрибута должно быть постоянным" в Eclipse.

Но, если я просто определяю член так, это работает:

public final static long TESTNG_TEST_TIMEOUT = 300000;
Разве использование временной единицы не является константой?
1 12

1 ответ:

Это

public final static long TESTNG_TEST_TIMEOUT = 300000;

- это постоянная переменная, тип постоянного выражения.

Это

public final static long TESTNG_TEST_TIMEOUT = TimeUnit.MINUTES.toMillis(5);

- нет.

Члены аннотацииожидают постоянные выражения (и некоторые другие вещи, такие как перечисления и литералы Class).