0

使用private fieldand的更好方法是什么private 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;
}
4

3 回答 3

2

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

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

总的来说,这两种方法对我来说似乎都有效。从私有方法访问私有成员没有问题,将其作为参数传递也没有问题。

关于具体的例子,我稍微喜欢第二种实现方式。私有方法在那里是自包含的——它不依赖于除了它的参数之外的任何东西。这使得阅读、测试和重用变得更容易。您可以推理该方法并争论其正确性,而无需知道model它是什么以及它的getPrice方法是如何工作的。

于 2012-04-24T13:03:48.157 回答
1

以下是我可以识别的优点和缺点:

这个版本...

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

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

这个版本...

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

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


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

于 2012-04-24T13:19:14.117 回答
0

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

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

于 2012-04-24T13:00:41.080 回答