A seguinte questão do whizlabs pergunta quais deste metódos são válidas?
A. public static<X,Y extends X>boolean isPresent()
b.public <X,Y extends X> static boolean isPresent()
c.public static boolean <X,Y extends X> isPresent()
D.nenhuma
A resposta certa é a A, mas as outras opções estão erradas somente pela declaração genérica está em lugar incorreto??
Desde já agradeço.
Puxa, se houvesse caído uma questão dessas na minha prova, tinha rodado bonito.
De fato, conforme você pode ver, a única coisa que distingue as opções é realmente a posição da declaração.
Mas isso só pode ser respondido adequadamente se você souber de cor o parágrafo 8.4 da JLS ( http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.4 ) e entender direitinho essa língua de advogado.
Traduzindo a língua de advogado para o português, ele diz que uma declaração de método deve ter, nesta ordem:
- Os modificadores do método (public, static, etc.)
- A seguir, os parâmetros de tipos (é essa parte de <X, Y extends X> que você viu nessa declaração)
- Então o tipo de retorno (neste caso é o “boolean”)
- E por fim o nome do método, e os parâmetros.
A opção B está com a ordem 1, 2, 1, 3, 4 (ou seja, está errada), e a opção C está com a ordem 1, 3, 2, 4 (que também está errada).
[2]
Deus Salve os erros de compilação!
eu só sabia da resposta por pura tentativa e erro hauhaua…
ja cometi tantas vezes os erros, principalmente o da letra C, que sabia que só a A estava correta ^^