4

次のメソッド定義により、マークダウンされた割り当てが返されました。

static String[] getDayData (int day) {

私が言われた:

関数には常に定義者public/ private/protectedが含まれている必要があります。

私は Java の関数部分に同意しないという事実にもかかわらず、ここでは次のように明確に述べています。

メソッド宣言に必要な要素は、メソッドの戻り値の型、名前、かっこのペア()、および中かっこで囲まれた本体のみ{}です。

それで、誰がこれについて考えていますか?メソッドの定義に常に修飾子を含める必要がありますか?

4

4 に答える 4

10

額面通りに受け取ったその声明は、間違いなく間違っています。宣言したいものがパッケージ プライベート メソッドである場合は、これが唯一の方法です。その宣言は、その意味を変更せずにアクセス修飾子を追加することはできません。

採点基準に関して教師が正確に何を念頭に置いているかは別の問題ですが、私自身の教育経験から、そのコメントには同意できません。Java 101 の教育には、すべてのメソッド アクセス レベルが含まれます。

余談ですが、公式用語の「メソッド」の代わりに「関数」を恣意的に使用していることにも同意できません。これは私の本の悪い教えであり、根本的な原因が Java の無知なのか、それとも誤った指導法なのかは、私たちが持っている情報からは識別できません。そして... 彼は本当に「定義者」という用語を使用しましたか? この用語は、Java であろうと他の場所であろうと、存在さえしません。

于 2012-11-30T23:46:25.993 に答える
2

チームでプログラミングする場合、誰もがあなたが採用している言語に常に精通しているわけではありません。Java言語仕様では、クラスメンバーのアクセス修飾子は必要ありませんが、明示的に指定すると、何をしようとしているのかがすべての人に明確になります。もちろん、唯一の例外は、パッケージのプライベートメソッドが必要なMarkoTopolnikの場合です。ただし、それらを利用する一般的なデザインパターンはほとんどないと思います。私はあなたがそれらを必要とする論理的な状況を考えることさえできません。

于 2012-11-30T23:49:47.960 に答える
2

Javaフィールドとメソッドには4つの可視性レベルがあり、それぞれが最後のレベルよりも「広い」ものです。

  1. private-このクラス内でのみ表示されます
  2. 「デフォルト」(つまり、修飾子なし)-このクラスと同じパッケージ内の他のクラスに表示されます
  3. protected-このクラス、同じパッケージ内の他のクラス、および他のパッケージ内にあるこのクラスのサブクラスに表示されます
  4. public-どこにでも見える

したがって、修飾子のないメソッドがあることは有効です。私が見たいくつかのコーディングスタイルは、次のようなコメントでパッケージの可視性をより明確にします

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

これはスタイルの問題と見なされ、それに基づいて採点される可能性がありますが、デフォルトの可視性を使用するメソッドとクラスは価値があります。Java のデフォルトの可視性はパッケージ レベルの可視性です。Java チュートリアルのこの部分を参照してください。ライブラリを作成するときによく使用します。ライブラリ内の他のクラス内からアクセスしたい関数といくつかのフィールドがありますが、内部使用のみを目的としています。PHP などの他の言語で書いているとき、私はこのレベルの可視性を欠いており、代わりに「内部のみ」と宣言されたパブリック宣言された関数のコメントに頼っています。このデフォルト レベルでは、サブパッケージは異なるパッケージと見なされ、この可視性レベルでは機能を表示できないことに注意することが重要です。

おそらくパッケージ外で使用することを意図していたので、ポイントを取り戻すことはまずありません.

于 2012-11-30T23:48:35.043 に答える