¿Alguien puede explicar por qué los parámetros de anotación String y Class se esperan de forma diferente? ¿Por qué el compilador requiere literales para Clases, si acepta constantes para Cadenas también?El atributo de anotación debe ser un literal de clase? ¿Por qué? Las constantes también deberían estar bien
Ejemplo de trabajo con @RequestMapping de primavera:
public class MyController {
public static final String REQUEST_MAPPING = "/index.html";
@RequestMapping(MyController.REQUEST_MAPPING) // ALL OK!
...
}
WTF ejemplo, con @test de 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
...
}
Lo que funciona, por supuesto, es @test (expectedExceptions = RuntimeException.class). ¿Pero por qué? La única diferencia en el parámetro de anotación que veo es su tipo: String vs Class. ¿Por qué en la tierra el compilador de Java también aceptaría String constant pero solo aceptaría literales de clase?
Wow, no entiendo el objetivo de esto. ¿Por qué esta restricción en Class? Gracias por señalar esto. – sibidiba