web-dev-qa-db-fra.com

Dans Java pourquoi cette erreur: 'la valeur d'attribut doit être constante'?

J'ai du code TestNG, où je passe un paramètre d'annotation de test appelé timeOut = TESTNG_TEST_TIMEOUT.

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

Et dans ma classe TestBase, j'ai ce membre:

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

Lorsque j'utilise la ligne de code ci-dessus, j'obtiens une erreur "la valeur d'attribut doit être constante" dans Eclipse.

Mais, si je définis simplement le membre ainsi, cela fonctionne:

public final static long TESTNG_TEST_TIMEOUT = 300000;

L'utilisation de TimeUnit n'est-elle pas une constante?

17
djangofan

Ce

public final static long TESTNG_TEST_TIMEOUT = 300000;

est un variable constante , un type de expression constante .

Ce

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

n'est pas.

Membres d'annotation attendre expressions constantes (et quelques autres choses comme des énumérations et des littéraux Class).

24