Qualcuno può spiegare perché i parametri di annotazione String e Classe sono previsti in modo diverso? Perché il compilatore richiede valori letterali per Classi, accettando le costanti per le stringhe?L'attributo di annotazione deve essere un valore letterale di classe? Perché? Anche le costanti vanno bene
esempio Lavorare con @RequestMapping di Primavera:
public class MyController {
public static final String REQUEST_MAPPING = "/index.html";
@RequestMapping(MyController.REQUEST_MAPPING) // ALL OK!
...
}
WTF esempio con @Test di TestNG:
public class MyControllerTest {
public static final Class TEST_EXCEPTION = RuntimeException.class;
@Test(expectedExceptions = MyControllerTest.TEST_EXCEPTION) // compilation error, WTF:
// The value for annotation attribute Test.expectedExceptions must be a class literal
...
}
Che funziona, naturalmente, è @Test (expectedExceptions = RuntimeException.class). Ma perché? L'unica differenza nel parametro di annotazione che vedo è il suo tipo: String vs Class. Perché mai il compilatore Java accetta anche String constant ma accetta solo valori letterali di classe?
Wow, mi manca assolutamente il senso di questo, perché questa restrizione in classe? Grazie per averlo sottolineato. – sibidiba