2009-12-31 13 views
47

¿Es beneficioso hacer que los métodos privados sean definitivos? ¿Eso mejoraría el rendimiento?¿Finalizar métodos privados?

Creo que "final privado" no tiene mucho sentido, porque un método privado no se puede anular. Por lo tanto, la búsqueda del método debe ser eficiente como cuando se usa el final.

¿Y sería mejor hacer un método de ayuda privada estático (cuando sea posible)?

¿Qué es lo mejor para usar?

private Result doSomething() 
    private final Result doSomething() 
    private static Result doSomething() 
    private static final Result doSomething() 
+0

Los métodos privados no se heredan y, por lo tanto, no se pueden sobrescribir. Una subclase puede contener un método con el mismo nombre que un método privado final en la superclase. Por lo tanto, no tiene sentido declarar un método como final privado. – CKing

Respuesta

65

Agregar final a los métodos no mejora el rendimiento con Sun HotSpot. Cuando se pueda agregar final, HotSpot notará que el método nunca se anula y por lo tanto lo trata de la misma manera.

En Java private los métodos no son virtuales. No puede anularlos, incluso utilizando clases anidadas donde pueden ser accesibles para subclases. Por ejemplo, los métodos que la instrucción para llamar a los privados es diferente de la que se usa para los que no son privados. Agregar final a métodos privados no tiene ninguna probabilidad.

Como siempre, este tipo de micro-optimizaciones no vale la pena perder tiempo.

+0

... en el 99,9% de las veces. Y sabrá cuándo las microoptimizaciones tienen sentido. Más importante aún, 'final' declaraciones de métodos privados no tienen sentido semánticamente por lo que sólo añade confusión donde no había ninguno; solo 'privado' debería ser suficiente. –

8

No. It will not. los métodos privados no son heredados. Entonces hacerlos definitivos es un punto discutible. También tenga en cuenta que no debe hacer que los métodos sean definitivos para el rendimiento. JVM es más inteligente que eso. Este tipo de optimización no es muy útil. Debe hacer que las cosas sean definitivas, privadas, privadas, protegidas, privadas, etc. según la semántica y el diseño.

21

private static Result doSomething(), si este método no utiliza variables de instancia. En cualquier caso, hacer que sean definitivas no tiene sentido ya que el acceso es privado.

7

Marcar un método privado como final no cambia nada, pero podría confundir a los desarrolladores junior que buscan su código. Mantenlo simple.

4

El IBM Developer funciona: Java theory and practice: Is that your final answer? artículo es un viejo pero bueno sobre el uso de la palabra clave final en Java:

+0

Hombre Desearía que C# tuviera una última palabra clave. En cambio, tiene const, readonly y sealed. bleh. –

0

Haciendo último método que no puede reemplazar el método. Como los métodos privados no se pueden acceder fuera de la clase. No hay ninguna tentativa de hacer que el método sea final y privado. Puede afectar el rendimiento.

+1

No va a golpear el rendimiento, los compiladores son más inteligentes que esta –

Cuestiones relacionadas