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()
!