2013-02-09 106 views
-2

我有一類設置返回一個字符串,像這樣:一些奇怪的getString錯誤

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() 位置:類文件

+2

你得到了什麼錯誤?在獲取文件之前你是否設置了文件?並請遵循Java NAming慣例。你的變量應該是'file'而不是'File'。如果它是文件的名稱,最好命名爲'fileName'。 – 2013-02-09 09:43:24

+1

另外,'File'是Java中的一個預定義的類。你不應該用這個名字命名你的班級。此外,我沒有看到有什麼理由去創建這樣一個班級。你爲什麼要這樣做? – 2013-02-09 09:44:49

+0

簡單名稱可能出現在可能被解釋爲變量,類型或包的名稱的上下文中。在這些情況下,變量將優先於類型來選擇,而類型將優先於包來選擇。 (http://docs.oracle.com/javase/specs/jls/se5.0/html/names.html) – 2013-02-09 09:47:08

回答

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.Filetextrpg.File,則這可能會導致稍後出現問題。

  • 您也忽略了關於如何形成旨在避免程序包名稱衝突的程序包名稱的約定。


之前,你寫更多的代碼,我強烈建議您閱讀Sun Java Coding Conventions。而且除非你有一個真的真的不是的好理由,跟着他們。 (「我不會被打擾」不是一個很好的理由,國際海事組織。)


啊。因此,編譯錯誤是這樣的:

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

,它是說,它無法找到一個方法File稱爲getFile()

沒有看到該課程的其餘部分,我不能確定。然而,我嫌疑人,你正在導入java.io.* ...這意味着代碼段中的File將指java.io.File ......它沒有getFile()方法!

+0

編輯時,netbeans錯誤是:找不到符號符號:方法getFile()位置:class文件。編譯器錯誤是WAAY太長 – 2013-02-09 09:57:51

+0

謝謝,多數民衆贊成它! – 2013-02-09 10:17:42