-2

次のような文字列を返すように設定されたクラスがあります。

package TextRPG;

public class File {

    static String file;

    public static void setFile(String fileLocation) {
        file = fileLocation;
    }

    public static String getFile(){
        return file;
    }
}

しかし、次のように呼び出そうとすると PrintWriter save = new PrintWriter(File.getFile()); 、エラーが発生します。私は何を間違っていますか?編集、netbeansエラーは次のとおりです:シンボルが見つかりませんシンボル:メソッドgetFile()場所:クラスファイル

4

1 に答える 1

1

Java の命名規則を無視しているため、自分の足を撃ったことになります。

変数名は小文字で始める必要があります。したがって:

package textrpg;

public class File {
    static String file;

    public static void setFile(String fileLocation) {
        file = fileLocation;
    }

    public static String getFile(){
        return file;
    }
}

Javaコンパイラはこれを気にしません...しかし、 と呼ばFileれるクラスで呼び出されたフィールドを宣言したため、フットショットが発生Fileし、名前の衝突を明確にするためのJavaのルールが奇妙な答えになりました。

(コンパイラのエラーメッセージも含めていただけると説明しやすいのですが…)


このクラスには他にもいくつかの問題があります。

  • これは非常に非オブジェクト指向のコードです。それを取得および設定するための静的フィールドと静的メソッドがあります。この種のことは少し「厄介」です...別のコンテキストでコードを再利用する必要がある場合、または単体テストを実装する必要がある場合などに問題が発生します。

  • 有名な標準クラス ( ) と同じ名前を使用していますjava.io.File。これは、アプリケーション内の他のクラスが と の両方を使用する必要がある場合に、後で問題を引き起こす可能性がjava.io.Fileありtextrpg.Fileます。

  • また、パッケージ名の衝突を避けるように設計されたパッケージ名の形成方法に関する規則も無視しています。


さらにコードを記述する前に、 Sun Java Coding Conventionsを読むことを強くお勧めします。そして、そうしない本当に本当に正当な理由がない限り、それらに従ってください. (「気にすることができなかった」というのは正当な理由ではありません、IMO。)


ああ。したがって、コンパイルエラーは次のとおりです。

PrintWriter save = new PrintWriter(File.getFile());

getFile()で呼び出されたメソッドが見つからないと言っていますFile

そのクラスの残りの部分を見ないと、確信が持てません。ただし、インポートしていると思わjava.io.*れます...そして、それFileはコードスニペットの が参照されることを意味しjava.io.Fileます...これにはメソッドがありませんgetFile()!

于 2013-02-09T09:51:11.073 に答える