一些奇怪的getString Bug

时间:2013-02-09 09:41:57

标签: java file-io

我有一个类设置返回一个像这样的字符串:

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()   location:类文件

1 个答案:

答案 0 :(得分: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。除非你有真的非常有充分的理由不遵守它们。 (“我不能被打扰”不是一个很好的理由,IMO。)


阿。因此编译错误在于:

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

并且说它在getFile()中找不到名为File的方法。

在没有看到该课程的其余部分的情况下,我无法确定。但是,我怀疑您要导入java.io.* ...这意味着代码段中的File将引用java.io.File ...没有getFile()方法!