【问题标题】:Private fields inside private methods VS pass them from public methods私有方法中的私有字段 VS 从公共方法传递它们
【发布时间】:2012-05-05 02:37:42
【问题描述】:

使用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;
}

【问题讨论】:

  • 如果你的 modifyPrice() 方法应该只在这个类中使用(这似乎是因为 private 可见性),我更喜欢第一个答案。
  • 谢谢建议,我也先用,但犹豫了
  • @sergionni 所以不要犹豫 ;)
  • 好的,我明白了,谢谢)

标签: java methods call field private


【解决方案1】:

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

这个版本...

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

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

这个版本...

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

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


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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 是的,可见性很明显。问题是关于“我是否应该在私有方法中使用私有字段,如果有可能将它们作为参数从公共方法传递”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 2011-12-06
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      相关资源
      最近更新 更多