0

我有一个名为的类Files,我有一个toString像这样的方法:

     public String toString() {
        String res = "[";
        for (int i = 0; i < files.size(); ++i) {
            if (i > 0) {
                res += " ";
            }
            res += files.get(i);
        }
        return res + "]";
     }

在一个名为的单独类中,Homework我有另一个 toString 方法,我试图在其中打印返回的字符串Files.toString()。现在我的代码看起来像:

    public String toString(){
        String output = Files.toString();
        return output;

    }

但它给我的错误是它不能对非静态方法进行静态引用。有没有办法进行非静态引用?这两种toString方法都不是静态的,所以我不知道它为什么要进行静态引用。

4

5 回答 5

2

这个表达式

   Files.toString()

指的是一个静态toString方法 - 你需要使用一个实例Files

Files files = new Files();

...

String output = files.toString();
于 2013-10-17T15:26:27.217 回答
1

因为toStringinFiles不是静态方法,但您以静态方式引用它。制作一个对象,Files然后像访问它一样new Files().toString();

于 2013-10-17T15:26:17.037 回答
1

你想使用一个文件对象而不是文件类,你这样做的方式是你从类 File 调用方法 toString() 你不能这样做,因为 toString 不是静态方法,但你可以从一个对象调用 toString基于 Files 类。

于 2013-10-17T15:26:53.840 回答
0

这是一个静态参考:

Files.toString()

因为Files是类的名称。但是,这不是静态方法:

public String toString() {

如果您尝试调用.toString()特定实例Files则需要在该实例上调用它,而不是在类本身上。例如,如果实例变量被调用,myFiles那么你会这样做:

public String toString(){
    String output = myFiles.toString();
    return output;
}

Files您的对象中的实例在哪里Homework?或者,如果你没有实例,你想把什么变成字符串?

于 2013-10-17T15:26:50.480 回答
0

您必须有一个 Files 类的实例才能调用它的非静态方法。

Files f = new Files();
f.toString();
于 2013-10-17T15:27:28.063 回答