Вы выстрелили себе в ногу, потому что вы не обращая внимания на правила именования 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 для неоднозначности столкновения имя придумали странный ответ.
(Если вы включили сообщение об ошибке компилятора, было бы проще объяснить ...)
Есть несколько других проблем с этим классом:
является очень не-OO-код. У вас есть статическое поле и статические методы для его получения и настройки. Такая вещь немного «нехорошая» ... и приведет к проблемам, если вам нужно повторно использовать код в другом контексте или реализовать модульные тесты и т. Д.
Вы используете то же имя, что и общеизвестный стандартный класс (java.io.File
). Это может привести к проблемам позже, если какой-либо другой класс в вашей заявке должен использовать как java.io.File
, так и textrpg.File
.
Вы также игнорируете соглашение о том, как формировать имя пакета, предназначенное для предотвращения столкновений имен пакетов.
Перед тем, как писать больше кода, я настоятельно рекомендую вам прочитать Sun Java Coding Conventions. И если у вас нет действительно действительно повод, чтобы не следовать, следовать им. («Я не мог беспокоиться», не является веской причиной, ИМО.)
Ah. Таким образом, ошибка компиляции в этом:
PrintWriter save = new PrintWriter(File.getFile());
и он говорит, что он не может найти метод, называемый getFile()
в File
.
Не видя остальной части этого класса, я не могу быть уверен. Тем не менее, I подозревает что вы импортируете java.io.*
... и ТО означает, что File
в фрагменте кода будет ссылаться на java.io.File
... который не имеет метода getFile()
!
Какая ошибка вы получаете?Вы установили файл перед его получением? И, пожалуйста, следуйте соглашениям Java NAming. Ваши varaibles должны быть 'file', а не' File'. И если это имя файла, лучше назовите его как 'fileName'. –
Кроме того, 'File' является предварительно определенным классом в Java. Вы не должны называть свой класс этим именем. Кроме того, я не вижу причин создавать такой класс. Почему ты так делаешь? –
Простое имя может возникать в контекстах, где его потенциально можно интерпретировать как имя переменной, типа или пакета. В этих ситуациях переменная будет выбрана в предпочтении к типу, и тип будет выбран в предпочтении к пакету. (http://docs.oracle.com/javase/specs/jls/se5.0/html/names.html) –