从方法java返回值

时间:2013-01-03 20:03:15

标签: java class variables return

我在java中编写了一个程序,用于返回值表。后来随着这个程序的功能的增长,我发现我想在方法中访问一个未返回的变量,但我不确定最好的方法。我知道你不能返回多个值,但是如果不进行大修,我将如何访问这个变量呢? 这是我的代码的简化版本:

public class Reader {
    public String[][] fluidigmReader(String cllmp) throws IOException {
        //read in a file
        while ((inpt = br.readLine()) != null) {
            if (!inpt.equals("Calls")) {
                continue;
            }
            break;
        }
        br.readLine();
        inpt = br.readLine();
        //set up parse parse parameters and parse
        prse = inpt.split(dlmcma, -1);
        while ((inpt = br.readLine()) != null) {
            buffed.add(inpt);
        }
        int lncnt = 0;
        String tbl[][] = new String[buffed.size()][rssnps.size()];
        for (int s = 0; s < buffed.size(); s++) {
            prse = buffed.get(s).split(dlmcma);
            //turns out I want this smpls ArrayList elsewhere
            smpls.add(prse[1]);
//making the table to search through
            for (int m = 0; m < prse.length; m++) {
                tbl[lncnt][m] = prse[m];
            }
            lncnt++;
        }
        //but I return just the tbl here
        return tbl;
    }

有人可以推荐一种方法在另一个类中使用smpls而不返回它吗?这可能是你使用get / set类型的设置吗? 对不起,如果这似乎是一个显而易见的问题,我仍然是模块化编程世界的新手

4 个答案:

答案 0 :(得分:3)

现在你有了这个tbl变量。将它包装在一个类中并将列表添加到类中。

class TableWrapper {
    // default accessing for illustrative purposes - 
    // setters and getters are a good idea
    String[][] table;
    List<String> samples;

    TableWrapper(String[][] table, List<String> samples) {
        this.table = table;
        this.samples = samples;
    }
}

然后重构您的方法以返回包装器对象。

public TableWrapper fluidigmReader(String cllmp) throws IOException {
    // your code here
    String tbl[][] = new String[buffed.size()][rssnps.size()];
    TableWrapper tw = new TableWrapper(tbl,smpls);
    // more of your code
    return tw;
}  

然后在你要去的代码中

String[][] tbl = fluidigmReader(cllmp);

你改为

TableWrapper tw = fluidigmReader(cllmp);
String[][] tbl = tw.table;
List<String> smpls = tw.samples;

答案 1 :(得分:1)

如果您使用专用类作为返回值(例如另一个答案中提到的TableWrapper),那么您可以在那里添加其他字段。

这是关于课程的好处 - 它们可以扩展。但是你无法在Java中扩展String[][]

答案 2 :(得分:0)

您可以设置一个字段,而不是局部变量,稍后可以使用getter检索该字段。除非需要,否则你想要避免它,但在这种情况下它是。

答案 3 :(得分:0)

您可以使用class(Inside Reader class)变量。但要确保它的读/写是同步的