2013-08-24 56 views
0
  • 我有一個可變大小塊的數組,我想在其中執行一些業務邏輯。
  • 我必須使用'size'參數來標識要解析和處理的字節數(總數 - 在所有塊中),處理後的結果應該是塊列表及其大小。
  • 我寫了一個非常整潔地分析數據的遞歸邏輯,但是爲了使它非常簡潔,我不得不將它限制爲沿塊邊界(對齊)運行。
  • 這看起來不錯,因爲我將擁有的唯一不對齊的塊將是第一塊也是最後一塊。我以前的函數可以很好地處理最後一個塊,但不是第一個。
  • 所以,我寫了一個不同的函數來處理塊中的非對齊偏移量。Java方法需要一個大小參數,做一些工作並返回一個引用並更新方法2要使用的大小,引用和大小

  • 我的DS:

    class BlockInfo { 
        private long blockID; 
        private long blockSize; 
    } 
    
    public class BlockIDSet { 
        private long offset; 
        private int firstBlockIndex; 
        private List<BlockInfo> resultSet; 
    } 
    
  • 工作第一功能的:如果起始偏移量未對齊,解析剩餘的字節從偏移到該塊的結束,並返回firstBlockIndexsingle BlockInfo object並更新remaining size (numBytes)

  • 第二個函數將消耗remaining size,從firstBlockIndex +1開始並返回list of BlockInfo objects

在C++中,這是很常見的爲我們傳遞參數作爲參考和更新功能其值通話中,以便更新的值可以在以後使用。據我所知,Java建議不要這樣做。 Related Question。我應該如何實現這一目標?或者是我的設計有缺陷,我應該重新做?

+0

您可以定義一個類,將該類的一個實例作爲參數傳遞,並從被調用的方法更新該對象。您也可以不改變參數,並從您的方法返回一個自定義對象。 Java是OO語言。定義類和使用對象。 –

回答

0

如果你想傳遞函數之間numBytes呼叫您必須選擇:

使用函數的返回值

numBytes = 1024; 
numBytes = numBytes - firstJob(numBytes, ...); 
secondJob(numBytes,...); 

Apache commons-lang Mutable objects

MutableInt numBytes = new MutableInt(1024); 
firstJob(numBytes, ...); 
secondJob(numBytes, ...); 

和內部功能,你可以改變整數值裏面沒有變化的可變對象numBytes參考(你不能用Java做那個)


另外,如果你想改變一個BlockInfoBlockIDSet(作爲參數傳遞)的屬性,你可以沒有問題做。

public void firstJob(BlockInfo bi) { 
    bi.blockSize = 23; 
} 
+0

這就是我正在做的...... :( – user1071840

+1

爲什麼:(這是Java中的一個普通實踐 –

+0

我最近開始使用java,來自C++ ..通過引用傳遞給我非常直觀的..所以: (......'範式轉移! – user1071840

相關問題