[解決済み】Java パラメータとしてメソッドを渡す
2022-04-16 06:48:41
質問
メソッドを参照渡しする方法を探しています。Javaがメソッドをパラメータとして渡さないことは理解していますが、私は代替手段を得たいと思います。
パラメータとしてメソッドを渡す代わりにインターフェイスがあると聞きましたが、インターフェイスがどのように参照によってメソッドとして機能するのか理解できません。もし私が正しく理解していれば、インターフェースは定義されていない抽象的なメソッドの集合に過ぎません。複数の異なるメソッドが同じパラメータで同じメソッドを呼び出す可能性があるため、毎回定義する必要があるようなインターフェースを送信したくありません。
私が実現したいのは、このようなことです。
public void setAllComponents(Component[] myComponentArray, Method myMethod) {
for (Component leaf : myComponentArray) {
if (leaf instanceof Container) { //recursive call if Container
Container node = (Container) leaf;
setAllComponents(node.getComponents(), myMethod);
} //end if node
myMethod(leaf);
} //end looping through components
}
などが呼び出される。
setAllComponents(this.getComponents(), changeColor());
setAllComponents(this.getComponents(), changeSize());
解決方法は?
編集 : Java 8時点のものです。 ラムダ式 として、良い解決策になります。 その他 回答 が指摘しています。下記の回答は、Java7以前のバージョンで書かれたものです...
を見てみましょう。 コマンドパターン .
// NOTE: code not tested, but I believe this is valid java...
public class CommandExample
{
public interface Command
{
public void execute(Object data);
}
public class PrintCommand implements Command
{
public void execute(Object data)
{
System.out.println(data.toString());
}
}
public static void callCommand(Command command, Object data)
{
command.execute(data);
}
public static void main(String... args)
{
callCommand(new PrintCommand(), "hello world");
}
}
編集する
として
ピート・カーカム氏が指摘する
を使って行う方法もあります。
訪問者
. ビジターアプローチはもう少し複雑で、ノードはすべて
acceptVisitor()
しかし、より複雑なオブジェクトグラフをトラバースする必要がある場合は、検討する価値があります。
関連
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] 文字列の巻き方
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] Javaで関数をパラメータとして渡すには?[重複しています]。