私有方法内的私有字段VS从公共方法传递它们

时间:2012-04-24 12:54:04

标签: java methods call field private

使用private fieldprivate methods的最佳方式是什么?

在私有方法中使用私有字段是否优雅,或者从公共方法调用私有方法时最好将它们作为参数?

字段:

private Item model;

1 公共方法:

...
if (model.getPrice() != null) {
 String formattedPrice = formatPrice();
}
...

私人方法:

private int formatPrice(){
 int price =  model.getPrice() + 10;
}

VS

2 公共方法:

if (model.getPrice() != null) {
 String formattedPrice = formatPrice(model.getPrice());
}
...

私人方法:

formatPrice(int price){
 int price = price + 10;
}

3 个答案:

答案 0 :(得分:2)

  

在私有方法中使用私有字段是否优雅,或者在公共方法中调用私有方法时,最好将它们作为参数?

我认为这是非常主观的,取决于您的偏好,也取决于具体情况。

一般来说,这两种方法对我来说都是有效的。从私有方法访问私有成员没有问题,并且将它作为参数传递没有问题。

关于具体示例,我稍微倾向于第二种实现。私有方法在那里是自包含的 - 它不依赖于除其参数之外的任何东西。这使得它更易于阅读,测试和重用。您可以对该方法进行推理并争论其正确性,而无需了解model是什么以及getPrice方法的工作原理。

答案 1 :(得分:1)

以下是我可以识别的专家和骗子:

此版本......

    private int formatPrice() {
        // format model.getPrice()
    }

...潜在地避免了将错误的东西格式化为价格的“问题”,如果你在很多地方调用它,可能会节省一些字符。

此版本......

    private int formatPrice(int price) {
        // format price
    }

...可以用来格式化来自不同来源的价格(而不仅仅是来自model.getPrice()),但调用更加冗长,没有什么可以阻止你形成一些整数不代表价格。


然而,在我看来,两种方法之间没有太大区别。当然,对于一方或另一方来说,没有足够的差异显然是一种“更好的方式”。

答案 2 :(得分:0)

当您不希望在您正在实施的课程之外看到它们时,您应该使用私人方法。因此,如果要创建该类的实例,那么该私有方法将无法访问。

至于私人领域,同样的逻辑。好吧,无论如何,Java中没有什么是私密的,你可以通过使用反射来实现它。