使用private field
和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;
}
答案 0 :(得分:2)
在私有方法中使用私有字段是否优雅,或者在公共方法中调用私有方法时,最好将它们作为参数?
我认为这是非常主观的,取决于您的偏好,也取决于具体情况。
一般来说,这两种方法对我来说都是有效的。从私有方法访问私有成员没有问题,并且将它作为参数传递没有问题。
关于具体示例,我稍微倾向于第二种实现。私有方法在那里是自包含的 - 它不依赖于除其参数之外的任何东西。这使得它更易于阅读,测试和重用。您可以对该方法进行推理并争论其正确性,而无需了解model
是什么以及getPrice
方法的工作原理。
答案 1 :(得分:1)
以下是我可以识别的专家和骗子:
此版本......
private int formatPrice() {
// format model.getPrice()
}
...潜在地避免了将错误的东西格式化为价格的“问题”,如果你在很多地方调用它,可能会节省一些字符。
此版本......
private int formatPrice(int price) {
// format price
}
...可以用来格式化来自不同来源的价格(而不仅仅是来自model.getPrice()
),但调用更加冗长,没有什么可以阻止你形成一些整数不代表价格。
然而,在我看来,两种方法之间没有太大区别。当然,对于一方或另一方来说,没有足够的差异显然是一种“更好的方式”。
答案 2 :(得分:0)
当您不希望在您正在实施的课程之外看到它们时,您应该使用私人方法。因此,如果要创建该类的实例,那么该私有方法将无法访问。
至于私人领域,同样的逻辑。好吧,无论如何,Java中没有什么是私密的,你可以通过使用反射来实现它。