2013-02-09 104 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