2009-09-29 39 views
1

我有一個readData()函數,它讀取文件返回一些不同的解析數據對象。眼下,中readData()返回類型是Object[]Java:使用一個函數返回幾個不同類型的值

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上的左邊界等,這也感覺有點尷尬。如果不連續查找密鑰,很難用結果編碼。

+0

文件中對象的順序是否始終相同?像一個基因組,然後是5種物種?或者它取決於某些東西?你怎麼知道數據[0]是MyGenome和數據[1]是物種 – 2009-10-01 01:01:19

回答

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); 
+1

從來沒有(也是我的意思是____NEVER____)沒有最終公開。而且,即使對於這個簡單的課程,您也應該使變量保持私密。也從來沒有做一個可變的東西(如數組,可能MyGenome)公開。 – TofuBeer 2009-09-29 02:38:28

+0

呵呵 - 讓這是一個教訓:請注意我沒有指定public *或* private並且不會被燒傷... 人們只是假定它是不完整的(這是有意的) – Stephen 2009-09-29 20:26:13

+2

從來沒有(是的,我的意思是__NEVER__)嚴格遵守有關你永遠不應該做的事情的規則。有幾條規則沒有例外。例如,在內部,在完全由代碼控制的兩個地方之間來回傳遞純數據......在這種情況下避免獲取者和設置者的愚蠢是完全合理的。 – RHSeeger 2009-10-01 15:46:10

6

創建一個新的類別:

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

並返回。你可能會發現你還有其他的功能。也許圍繞你的getData()調用的代碼。

0

對於第一個問題,不能單純使用中間數據的代表性?我的意思是你可以讀一次你的文件,這會給你文件內容(你可以按照你想要的格式進行格式化),然後創建兩個方法readGenome()readSpecies(),它們將這個文件內容作爲參數。

0

您可以創建一個具有基因組和物種作爲字段的類。

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


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

如果您不認爲其他人會使用它,或者如果其他人會使用它,則可以將該類設爲私有。

如果您不想爲其創建單獨的文件,也可以將其設置爲靜態。

希望這會有所幫助。

相關問題