2011-06-14 33 views
5

Tengo una especie de pregunta general de Java a la que estoy buscando una respuesta. Digamos que tengo un objeto con una altura de propiedad y tengo un método que usa la altura para hacer algunos cálculos. ¿Es mejor pasar la altura de la propiedad al método o es diferente pasar el objeto completo y usar un getter para recuperar el valor de altura? Espero que esto tenga sentido.Pregunta de paso del parámetro de Java

p. Ej.

public getHeightInMeters(Object object) { 
    return object.getHeight()*x; 
} 

es lo mismo, peor, mejor que?

public getHeightInMeters(Height height) { 
    return height*x; 
} 
+0

@Sanjay T. Sharma estuvo de acuerdo – RMT

+0

Probablemente valga la pena cambiar las firmas para que sean prototipos de funciones en lugar de constructores. Solo digo. –

+0

@Mike significa agregar un tipo de devolución. – Snicolas

Respuesta

2

Depende.

Si la operación que está realizando está semánticamente vinculada al tipo de objeto, entonces tiene sentido pasar el objeto. O si está usando más de una propiedad del objeto.

Si la operación es genérica, es decir, se aplica a un número entero en lugar de a una propiedad específica del objeto, entonces simplemente acepte un número entero.

2

La segunda versión es mejor. Tengo una firma menos complicada. Como el método getHeightInMeters() solo necesita el valor de altura, debe mantenerlo simple.

2

El segundo. ¿A GetHeightInMeters le importa algo sobre los objetos? Si no, entonces no lo necesita.

Todo lo que necesita es Altura, entonces eso es lo que debe pasar.

1

La segunda es la mejor/forma correcta.

Es mejor pasar la altura de la propiedad, porque se rompe la dependencia. Es decir, si cambia el objeto pasado, elimine/cambie el nombre del método, terminará con enormes dolores de cabeza.

Además, si solo ingresa la altura de la propiedad, siempre sabrá qué entra y qué sale.

0

Pasar solo la información de altura requiere menos sobrecarga que todo el objeto, ya que tiene menos datos para serializar cada vez. Para una aplicación pequeña no hace la diferencia, pero a medida que aumente la escala incurrirá en una sobrecarga mayor.

Es la mejor opción si esa es la única propiedad que necesita del objeto.

0
class Person { 

private double height; 

public void setHeight(double height){ 
    this.height = height; 
} 

public double getHeight(){ 
    return height; 
} 
} 

La convención podría ser que la altura para esta clase está expresada en metros. embargo, es posible crear algunos convertes para otras métricas

public class Converter{ 

public static double convertFromMeterToInch(double meters){ 
return meters * 'some factor you get from net' 
} 

public static double convertFromInchtoMeter(double inch){ 
return .... 
} 
} 
0

Eso depende en general:

Si está utilizando más de una propiedad del objeto de la primera solución es mejor que la adición de más parámetros. Esto también tiene sentido si la operación está relacionada solo con el objeto; de lo contrario, use la segunda forma si esta es solo una operación atómica que también puede realizarse en otros objetos.

Otra cosa es que el prefijo get debe usarse generalmente para los miembros de la clase, en este caso se ve como si solo funcionara en algún valor constante y externo.Nosotros no somos la unidad de eso. Mejor denominación sería, por ejemplo, pixelsToMetters(int pixel), en este caso conocemos ambas unidades.

0

Desde el getXXXX() es por lo general una convención de nombres para un método de acceso, que será parte de su clase, por lo que algo como esto sería suficiente:

public double getHeightInMeters() { 
    return this.height*x; 
} 

Si necesita un simple conversor, el nombre de manera diferente y pasar un doble, ya que no está haciendo nada con el Objeto que está pasando. De esta forma, puede reutilizar este método para cualquier otro contexto.

¡Mantenga las cosas simples!

Cuestiones relacionadas