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
Respuesta
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.
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'. –
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.
- 1. ¿Por qué los métodos parciales deben ser anulados?
- 2. En Java, ¿por qué deben equals() y hashCode() ser consistentes?
- 3. ¿Por qué mis variables locales deben ser finales para ser accesibles desde una clase anónima?
- 4. ¿Por qué los métodos de interfaz no pueden ser "estáticos" y "finales"?
- 5. ¿Por qué los métodos antlr3 C# parser son privados?
- 6. ¿Por qué las clases internas hacen accesibles los métodos privados?
- 7. ¿Todos los métodos en la clase principal deben ser estáticos?
- 8. ¿Por qué los métodos "privados" en el objeto orientado?
- 9. ¿Por qué los métodos estáticos deben ser incluidos en una clase?
- 10. ¿Por qué los métodos virtuales deben anularse explícitamente en C#?
- 11. ¿Cómo debo probar los métodos privados en Java?
- 12. ¿Por qué las sobrecargas del operador C# deben ser estáticas?
- 13. ¿Finalizar métodos privados?
- 14. Java: ¿cómo implementar métodos abstractos privados?
- 15. ¿Por qué las variables pasadas a ejecutable deben ser definitivas?
- 16. en C# son métodos privados por defecto?
- 17. ¿Por qué no hay interfaces finales en Java?
- 18. ¿Por qué los tipos WinRT deben sellarse?
- 19. ¿Los contextos de datos deben ser estáticos?
- 20. Uso de métodos estáticos privados
- 21. ¿Por qué deben definirse los métodos de extensión C# en clases estáticas?
- 22. Métodos privados y campos
- 23. Bloques vs métodos privados?
- 24. F # Métodos estáticos privados
- 25. ¿por qué los argumentos predeterminados son los finales?
- 26. ¿Por qué veo "TypeError: los índices de cadena deben ser enteros"?
- 27. ¿Qué archivos de Visual Studio deben ser ignorados por subversión para minimizar los conflictos?
- 28. ¿Por qué los métodos Java con varargs identificados como transitorios?
- 29. JavaDoc: campos y métodos privados
- 30. Método Interceptor en métodos privados
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