2

これは少し紛らわしい質問なので、最善を尽くして質問します。

特定のコード ブロックの前後に大量のコードがあるとします。コード ブロックを囲むコードは常に同じままですが、ブロック内のコードは変更される可能性があります。簡単にするために、サラウンド コードが二重にネストされた for ループであるとします。

for(int i = 0; i<width; i++){
    for(int i = 0; i<height; i++){

        // changing code block

    }
}

ここで、プログラムのさまざまなインスタンスでコード ブロックにさまざまなコードを挿入するようにコンパイラに指示したいと思います。このようなことをするにはどうすればよいですか?

4

6 に答える 6

2

他の言語では、クロージャを使用してこれを解決できる場合があります。Java の場合、クラスのオブジェクトを渡す必要があります。

たとえば、 という関数がありLooper、それがパラメーターを取り、operationこの操作で関数を呼び出すとします。

Java 8以前でこれを行うには、呼び出し可能または同等のオブジェクトを受け取り、あなたのことを実行する関数を書くことができます。

(おそらくマイナーなエラーがあります。申し訳ありませんが、Java コードを書いてからしばらく経ちました。アイデアが明確であることを願っています)

public interface Operation {
    public int performOperation(int a, int b);

}
...
public void Looper(Operation o, int a, int b){
    for(int i = 0; i<width; i++){
        for(int i = 0; i<width; i++){
             o.performOperation(a,b);
        }
    }


}



 //elsewhere

   Looper(new Operation{
       public int performOperation(int a, int b){
            return a + b;
       }

    }, 10,15);

このパターンはmap、関数型言語の やその他の同様の関数、foreachおよび C++ の他の 100 万の関数で見られます。

于 2013-09-02T07:28:13.070 に答える
-1

次のように変更します

    for(int i = 0; i<width; i++){
        for(int j = 0; j<width; j++){
于 2013-09-02T07:10:41.717 に答える