有人告诉我,我们不应该从同一个类中的另一个公共方法调用类的公共方法。 现在我无法理解这一点,因为我没有看到任何问题。 一旦方法被声明为公共方法,那么它的合同将在生命周期内被修复,因此从另一个公共方法调用它时应该没有任何问题。
所以我不确定这个陈述是否属实,或者可以从另一个公共API调用公共api [这是从设计的角度来看]?
答案 0 :(得分:12)
当你尝试时,你的编译器是否会对你嗤之以鼻?没有?那么在这方面它是合法的。
提供此“建议”的人是否会生成任何解释标准的规范文档(在行业内或您的组织内)?没有?那就是它的意见。
咨询您的公司标准,否则,我称之为无意义。
答案 1 :(得分:6)
如果从其他公共方法调用公共方法,则会使单元测试更加复杂。如果一个方法依赖于同一个类的另一个方法,则无法模拟它以单独测试它。因此,您可能必须为同一方法编写测试代码两次。
答案 2 :(得分:5)
当您经常从同一个类的其他公共方法调用公共方法时,可能意味着您有不必要的实用程序方法。也许你应该尝试多做一些干燥,以便于维护并保持API易于掌握。
但这只是一个警告,从另一个方法调用公共方法是完全有效的,你会发现很多java.lang
标准代码的例子。
来自java.lang.String
的示例:
1462 public boolean startsWith(String prefix) {
1463 return startsWith(prefix, 0);
1464 }
将一些方法设为私有只是为了强制执行关于不调用其他公共方法的公共方法的规则是没有意义的。
答案 3 :(得分:2)
我不确定他的意思。您显然可以从另一个公共方法调用公共方法。这不是一个坏主意 - 甚至Java的源代码也有一种方法,其中一个公共方法调用另一个公共方法。
为什么不问建议你的人解释原因?我认为他的处境比我们好。
答案 4 :(得分:2)
在我看来,你应该避免因为继承而在另一个方法中调用公共方法。考虑课程:
public class Parent {
//return sum
public double getSum(double... value){
//implementation
}
//return average
public double getAverage(int count){
//call getSum
double sum = getSum(20, 40, 60);
return sum / count;
}
}
public class Child extends Parent {
@Override
public int getSum(double... obj){
// change implementation
// always return 100;
}
}
如果你调用了Child对象的getAverage方法,你会得到一些意想不到的值,Child对象的整个界面都被破坏了。 你也必须覆盖getAverage方法......
String类
的示例1462 public boolean startsWith(String prefix) {
1463 return startsWith(prefix, 0);
1464 }
从这个角度来看是错误的,因为string是final,所以你不能继承它并覆盖它的公共方法..
答案 5 :(得分:2)
我只是在这里总结答案并添加一些上下文:
我的2美分:
答案 6 :(得分:0)
当然,您可以从另一个公共方法调用任何公共方法,无论它是在同一个类还是另一个类中。但标准对不同的组织很重要。给他/她一些有效的例子。