Java:使用一个函数返回一些不同类型的值

时间:2009-09-29 02:06:28

标签: java oop software-design

我有一个readData()函数读取文件,返回几个不同的解析数据对象。目前,readData()的返回类型为Object[]

Object[] data = readData();
MyGenome genome = data[0];
Species[] breeds = data[1];
//etc

这感觉很尴尬。有没有更好的方法来返回这些数据?我不想拥有像readGenome()readSpecies()这样的单独函数,因为这需要迭代文件两次。另外,我宁愿将所有数据收集结合在一个函数中。

类似的问题:在两个字符串之间返回至少四个字符匹配的函数:

public int[][] findMatch(String g0, String g1) { /* cool stuff */ }
//...
int[][] bounds = findMatch("ACOIICOCOCICOICA", "AOCCCCCCICCIIIIIOIAOCICOICOICA");

其中bounds[0][0]是g0的左边界,bounds[0][1]是g0的右边界,bounds[1][0]是g1的左边界,等等。这也有点尴尬。如果不连续查找键,很难对结果进行编码。

4 个答案:

答案 0 :(得分:6)

创建一个新类:

class MyAnalysedGenome {
    MyGenome genome;
    Species[] species
    ...
}

并返回。您可能会发现您还应该有其他功能。也许围绕你的getData()调用的代码。

答案 1 :(得分:5)

如何使用强类型类来表示readData()的复杂返回类型?

public class Taxonomy
{
    public MyGenome genome;
    public Species[] breeds;
    //etc
{

Taxonomy data = readData();

您可以针对搜索范围问题执行相同的操作

public class SearchBoundary
{
    public int left;
    public int right;
}

SearchBoundary resultBounds = findMatch(searchBounds);

答案 2 :(得分:0)

对于第一个问题,您不能简单地使用中间数据表示吗?我的意思是你可以读取你的文件一次,它会给你文件内容(你可以按你想要的方式格式化),然后创建两个方法readGenome()readSpecies(),将这个文件内容作为一个参数。

答案 3 :(得分:0)

您可以创建一个以基因组和物种为领域的类。

...
class DataToBeRead {
    MyGenome  genome;
    Species[] breeds;
}
...


DataToBeRead data   = readData();
MyGenome     genome = data.genome;
Species[]    breeds = data.breeds;

如果你不认为其他人会使用它或者如果其他人会使用它,那么你可以将该课程设为私有。

如果您不想为其创建单独的文件,也可以将其设置为静态。

希望这有帮助。