我刚刚收到一个作业,由于以下方法定义而被标记为:
static String[] getDayData (int day) {
我被告知:
您的功能始终其中包含
public
/private
/protected
。
尽管我不同意Java中的函数部分,但它明确指出here:
方法声明中唯一必需的元素是方法的返回类型,名称,一对括号
()
以及大括号之间的正文{}
。
那么谁对此有任何想法?我是否应该始终在方法定义中包含修饰符?
答案 0 :(得分:10)
从表面上看,这种说法绝对是错误的。如果您要声明的是一个包私有方法,那么这是唯一的方法。该声明不可能添加访问修饰符而不改变其含义。
你的老师对他的标记标准的确切考虑是一个单独的问题,但根据我自己的教学经验,我不能同意这个评论。教学Java 101绝对包括所有方法访问级别。
另一方面,我也不同意他任意使用“功能”而不是官方用语“方法”。在我的书中,这只是一个糟糕的教学,无论是基础原因是对Java的无知还是误导的教学都无法从我们掌握的信息中辨别出来。并且......他真的使用“定义者”一词吗?这个术语甚至不存在 - 无论是在Java还是其他地方。
答案 1 :(得分:2)
在团队编程时,并不是每个人都会熟悉您所使用的语言。 Java语言规范没有要求类成员的访问修饰符,但是如果你明确说明它,那么每个人都清楚你打算做什么。当然唯一的例外是Marko Topolnik提到的情况,你需要一个包私有方法。虽然,我相信很少有常见的设计模式可以利用这些模式。我甚至无法想到你需要它们的逻辑情况。
答案 2 :(得分:2)
Java字段和方法有四个可见性级别,每个级别都比上一个“更宽”:
private
- 仅在此课程中可见protected
- 此类可见,同一个包中的其他类,以及此类的子类在其他包中public
- 随处可见所以有一个没有修饰符的方法是有效的。我见过的一些编码样式通过像
这样的注释使包可见性更加明确/* package-private */ static int foo() { ... }
答案 3 :(得分:1)
虽然这可能被视为样式问题而您可以在此基础上进行评分,但使用默认可见性的方法和类可能很有价值。 Java中的默认可见性是包级别可见性,请参阅Java教程的part。我倾向于在编写库时使用它。有些函数和一些字段,我想从我的库中的其他类中访问,但仅供内部使用。当用其他语言(例如php)编写时,我发现自己错过了这种级别的可见性,而是使用声明为public的函数进行评论,称它们是“仅内部”。使用此默认级别时,请务必注意子包被视为不同的包,并且无法查看具有此可见性级别的函数。
它不太可能让你得到回报,因为你可能打算在包装之外使用它。