2013-02-09 2 views
-2

У меня есть класс набор для возврата строки, как так:Некоторые Weird GetString Bug

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()); Я получаю сообщение об ошибке. Что я делаю не так? EDIT, ошибка NetBeans является: не может найти символ символ: метод GetFile() местоположение: Класс File

+2

Какая ошибка вы получаете?Вы установили файл перед его получением? И, пожалуйста, следуйте соглашениям Java NAming. Ваши varaibles должны быть 'file', а не' File'. И если это имя файла, лучше назовите его как 'fileName'. –

+1

Кроме того, 'File' является предварительно определенным классом в Java. Вы не должны называть свой класс этим именем. Кроме того, я не вижу причин создавать такой класс. Почему ты так делаешь? –

+0

Простое имя может возникать в контекстах, где его потенциально можно интерпретировать как имя переменной, типа или пакета. В этих ситуациях переменная будет выбрана в предпочтении к типу, и тип будет выбран в предпочтении к пакету. (http://docs.oracle.com/javase/specs/jls/se5.0/html/names.html) –

ответ

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 для неоднозначности столкновения имя придумали странный ответ.

(Если вы включили сообщение об ошибке компилятора, было бы проще объяснить ...)


Есть несколько других проблем с этим классом:

  • является очень не-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()!

+0

EDIT, ошибка netbeans: не может найти символ символа: метод getFile() location: class File. Ошибка компилятора WAAY слишком длинная –

+0

спасибо, вот и все! –