0
  • ビジネスロジックを実行したい可変サイズのブロックの配列があります。
  • 解析および処理するバイト数 (合計 - すべてのブロック内) を識別する「サイズ」パラメーターを使用する必要があり、処理後の結果はブロックとそのサイズのリストになります。
  • データを非常にきれいに解析する再帰ロジックを作成しましたが、それをきれいにするには、ブロック境界に沿って機能するように制限する必要がありました (整列)。
  • 私が持っている唯一の非整列ブロックは最初と最後になるので、それも問題ないように見えました. 私の以前の関数は、最後のブロックをうまく処理できますが、最初のブロックは処理できません。
  • そのため、ブロック内の位置合わせされていないオフセットを処理する別の関数を作成します。

  • 私の DS:

    class BlockInfo {
        private long blockID;
        private long blockSize;
    }
    
    public class BlockIDSet {
        private long offset;
        private int firstBlockIndex;
        private List<BlockInfo> resultSet;
    }
    
  • 最初の関数のジョブ: 開始オフセットがアラインされていない場合、オフセットからブロックの最後までの残りのバイトを解析して を返しfirstBlockIndex、.single BlockInfo objectremaining size (numBytes)

  • 2 番目の関数は を消費しremaining size、開始してfirstBlockIndex +1を返しますlist of BlockInfo objects

C++ では、参照として引数を渡し、関数呼び出しでそれらの値を更新して、更新された値を後で使用できるようにすることは非常に一般的です。私が読んだ限りでは、Java はそうしないことを推奨しています。関連する質問。どうすればこれを達成できますか? それとも、私のデザインに欠陥があるので、やり直すべきでしょうか?

4

1 に答える 1

0

関数呼び出し間で渡したい場合numBytesは、選択する必要があります。

関数の戻り値の使用

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

またはApache commons-lang 可変オブジェクト

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

関数内では、参照を変更せずに可変オブジェクト内の整数値を変更numBytesできます(Javaではできません)


BlockInfoまたは、 (パラメーターとして渡される) プロパティを変更したい場合は、BlockIDSet問題なく実行できます。

public void firstJob(BlockInfo bi) {
  bi.blockSize = 23;
}
于 2013-08-24T16:46:50.253 に答える