2011-10-11 23 views
23

Tengo un método privado en una clase interna que es privada. Me gustaría utilizar la anotación SafeVarargs. Sin embargo, estoy obligado a tener un método estático o final. ¿Por qué un método privado debe ser final también? ¿No es esto redundante?java @SafeVarargs por qué los métodos privados deben ser finales

+0

Si entiendo corregir puede utilizar @Safe varargs para los constructores, los métodos estáticos, por métodos finales y desde java-9 para uso privado – gstackoverflow

Respuesta

15

Es redundante, y trae a colación un punto excelente.

Creo que la verdadera razón para el requisito de final o estática era forzar que el método no se pudiera anular, y así una subclase no podía alterar los datos de forma que la anotación @SafeVarargs fuera inútil en la definición del método.

Pero, aunque es redundante, no es una mala decisión: muchas veces los programadores harán que todos los métodos sean privados tanto como sea posible y luego, lentamente, abrirán la clase según sea necesario. Si este método se marca como final cuando está en ámbito privado, entonces si el método tiene que abrirse, aún puede tener la anotación @SafeVarargs en su lugar con solo un cambio en el nivel de acceso. Si la final se elimina intencionalmente, obtendrá el error de tiempo de compilación, pero si ya la tuvo, quienquiera que elimine el acceso privado (que puede no ser usted mismo, en un entorno basado en equipos) no se confundirá en cuanto a por qué quitar el modificador "privado" de repente hace que el código ya no se compile.

+1

Si el mensaje de error sería algo así como "no válida java.lang. Anotación de SafeVarargs. El método de instancia ... no es definitivo ni privado ", no habría confusión para quien eliminó lo 'privado'. –

4

Esta característica forma parte del Proyecto de monedas 2 y estará publicada en Java 9 próximo mes de julio de 2017.

aceptar el llamado @SafeVarargs es todo sobre los métodos privados.

Link.

Cuestiones relacionadas