-2

我有一个类设置为返回一个字符串,如下所示:

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

4

1 回答 1

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。除非你有一个非常好的理由不这样做,否则请跟随他们。(“我不能被打扰”不是一个很好的理由,IMO。)


啊。所以编译错误是这样的:

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

它是说它找不到调用getFile()in的方法File

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

于 2013-02-09T09:51:11.073 回答