Java:method()。method()

时间:2014-03-14 01:04:49

标签: java

我已经创建了一个“Loader”类(不言自明,但它从文件夹中加载文件),并且由于我必须将加载的字符串转换为非常常见的整数数组,所以我想添加一个方法那个做那个的班级。

之前我已经看过以下内容,并且也使用了很多:

String s = "";
int length = s.toLowerCase().length();

而不是:

String s = "";
String lowercase = s.toLowerCase();
int length = lowercase.length;

但是当我尝试在Loader类中使用此方法时:

public int[][] initMatrix() {
    return new int[20][20];
}

我收到一个错误(可能很明显为什么,但我无法绕过它)。

使用它的正确方法是什么?

编辑:这是我打算使用的课程:

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Loader {
    public String[] loadStrings(String fileName) {
        String[] ret = null;
        try {
            ret = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8).toArray(new String[0]);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ret;
    }

    public int[][] initMatrix() {

    }
}

我尝试使用:

int[][] foo = new Loader().loadStrings().initMatrix();

编辑#2:我为这个令人困惑的问题道歉。我只是想不通为什么这个单线工作:

char c = "World".toLowerCase().charAt(0);

当您将System.out.println()发送到控制台时,最终会得到一个小写“w”,只有“w”。因此,在一行中,执行了2个步骤。显然有两种方法在起作用。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

好的,

int[][] foo = new Loader().loadStrings().initMatrix();

loadStrings返回一个字符串数组,initMatrix位于Loader类上。你不能像这样把它们连在一起。

尝试

Loader loader = new Loader();
loader.loadStrings ();
foo = loader.initMatrix ();

如果要组合这些步骤,可以在Loader中创建一个新方法,或者从构造函数中调用步骤

e.g。

Public int [][] doMyStuff () {
      loadStrings ();
      return initMatrix ();
   }

答案 1 :(得分:0)

你想要的可能是这样的:

public class Loader
{
    private String[] strings;

    public Loader loadStrings(final String filename) 
    {
        // initiate, fill "strings", then:
        return this; // Here is the "magic" stuff
    }

    public int[][] initMatrix()
    {
        // whatever
    }
}

但这是一个不稳定的设计;例如,如果您在致电.loadStrings()之前没有.initMatrix()该怎么办?您最好制作一个调用initMatrix(String fileName)的{​​{1}}方法,该方法将成为loadStrings()。这是一个解决方案,还有其他解决方案。