【问题标题】:Return value from method java方法 java 的返回值
【发布时间】:2012-12-18 06:04:10
【问题描述】:

我在 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 而不返回它的方法?这可能是当您使用获取/设置类型的设置时? 抱歉,如果这似乎是一个显而易见的问题,我对模块化编程世界还是新手

【问题讨论】:

  • 你永远不会在任何地方定义smpls,所以它不是方法的一部分。它已经是一个类变量了。
  • 另外,你对元音宣战了吗?他们不是坏事!
  • @corsiKa 看来我有。这是一个我正在努力改掉的旧习惯,但有时它们会以这种方式溜走。

标签: java class variables return


【解决方案1】:

现在你有这个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;

【讨论】:

  • 非常感谢您的解决方案。它写得很清楚,很容易理解。再次感谢!
【解决方案2】:

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

这是类的好处——它们可以扩展。但是你不能在 Java 中扩展 String[][]

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 2017-08-30
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多