繁体   English   中英

Java参数传递问题

[英]Java parameter passing question

我有一个通用的 java 问题,我正在寻找答案。 假设我有一个具有高度属性的 object,并且我有一个使用高度进行计算的方法。 将属性高度传递给方法更好还是传递完整的 object 并使用 getter 来检索高度值有什么不同。 我希望这是有道理的。

例如

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

相同、更差、更好?

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

第二个版本更好。 我有一个不太复杂的签名。 由于 getHeightInMeters() 方法只需要高度值,因此您应该保持简单。

第二。 getHeightInMeters 是否关心 object? 如果没有,那么它就不需要它。

它所需要的只是高度,所以这就是你应该通过的。

这取决于。

如果您正在执行的操作在语义上链接到 object 的类型,那么传递 object 是有意义的。 或者,如果您使用 object 的多个属性。

如果操作是通用的,也就是说,它适用于 integer 而不是 object 的特定属性,那么只需接受 integer。

第二个是最好/正确的方法

最好传递属性高度,因为您打破了依赖关系。 也就是说,如果你改变传入的 object, delete/rename 方法,你最终会非常头疼。

此外,如果您只是传递属性高度,您将始终知道什么进什么出。

仅传递高度信息所需的开销比整个 object 更少,因为每次序列化的数据更少。 对于一个小应用程序来说没有什么区别,但是当你扩大规模时,你会产生更大的开销。

如果这是您需要 object 的唯一属性,这是更好的选择。

class Person {

private double height;

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

public double getHeight(){ 
  return height;
}
}

约定可能是此 class 的高度以米为单位。 但是您可以为其他指标创建一些转换

public class Converter{

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

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

这通常取决于:

如果您使用 object 的多个属性,则第一个解决方案比添加更多参数要好。 如果操作仅与 object 相关,这也有意义,否则如果这只是可以对其他对象执行的一些原子操作,则使用第二种形式。

get前缀的另一件事通常应该用于 class 成员,在这种情况下,它看起来就像它只对一些常量和外部值进行操作。 我们没有它的单位。 更好的命名例如是pixelsToMetters(int pixel) ,在这种情况下我们知道这两个单位。

由于 getXXXX() 通常是访问器方法的命名约定,因此它将成为 class 的一部分,因此这样的内容就足够了:

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

如果您只需要一个转换器,请将其命名为不同的名称并传递一个双精度,因为它与您传递的 Object 无关。 这样,您也可以将此方法重用于任何其他上下文。

保持简单!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM