4

我刚收到一个作业,由于以下方法定义而被标记为:

static String[] getDayData (int day) {

有人告诉我:

你的函数应该总是有定义器 //public在其中。privateprotected

尽管我不同意 Java 中的函数部分,但它在这里明确指出:

方法声明中唯一需要的元素是方法的返回类型、名称、一对括号、()和大括号之间的主体,{}

那么谁对此有任何想法?我是否应该始终在方法的定义中包含修饰符?

4

4 回答 4

10

从表面上看,这种说法绝对是错误的。如果您要声明的是包私有方法,那么这是唯一的方法。该声明不可能在不改变其含义的情况下添加访问修饰符。

你的老师对他的评分标准到底有什么想法是一个单独的问题,但从我自己的教学经验来看,我不能同意这个评论。教授 Java 101 绝对包含所有方法访问级别

顺便说一句,我也不同意他随意使用“函数”而不是官方术语“方法”。在我的书中,这只是糟糕的教学,根本原因是对 Java 的无知还是只是被误导的教学法,我们无法从我们掌握的信息中看出这一点。而且……他真的用过“定义者”这个词吗?这个术语甚至不存在——无论是在 Java 中还是在其他地方。

于 2012-11-30T23:46:25.993 回答
2

在团队中编程时,并不是每个人都会始终熟悉您使用的语言。Java 语言规范不要求对类成员使用访问修饰符,但如果您明确声明,每个人都会清楚您打算做什么。当然,唯一的例外是 Marko Topolnik 提到的情况,您需要一个包私有方法。虽然,我相信很少有常见的设计模式可以利用这些。我什至想不出你需要它们的合乎逻辑的情况。

于 2012-11-30T23:49:47.960 回答
2

Java 字段和方法有四个可见性级别,每个级别都比上一个“更宽”:

  1. private- 仅在此类中可见
  2. “默认”(即无修饰符)- 对此类和同一包中的其他类可见
  3. protected- 对此类、同一包中的其他类以及其他包中的此类的子类可见
  4. public- 随处可见

所以有一个没有修饰符的方法是有效的。我见过的一些编码风格使包的可见性更加明确,评论如下

/* package-private */ static int foo() { ... }
于 2012-11-30T23:51:28.463 回答
1

虽然这可能被认为是一个风格问题,并且您可以在此基础上进行评分,但使用默认可见性的方法和类可能很有价值。Java 中的默认可见性是包级别的可见性,请参阅 Java 教程的这一部分。我倾向于在编写库时使用它。我想从库中的其他类中访问一些函数和一些字段,但仅供内部使用。在使用其他语言(例如 php)编写时,我发现自己缺少这种可见性级别,而是求助于声明为 public 的函数的注释,称它们是“仅限内部”。使用此默认级别,重要的是要注意子包被视为不同的包,并且无法看到具有此可见性级别的功能。

由于您可能打算将其用于包装之外,因此不太可能让您获得积分。

于 2012-11-30T23:48:35.043 回答