[解決済み] Javaスプレッド演算子
2022-03-11 18:58:13
質問
ここで使っている語彙がよくわからないのですが、間違っていたらご指摘ください。
Javascriptでは、以下のようなコードになっていました。
let args = [1,2,3];
function doSomething (a, b, c) {
return a + b + c;
}
doSomething(...args);
ご覧のように
doSomething
を使用することができるようになりました。
...
スプレッド演算子を使って、引数を
1, 2, 3
.
さて、同じことをJavaでやってみる。
例えば、私が
Foo
クラスがあります。
public class Foo {
public int doSomething (int a, int b, int c) {
return a + b + c;
}
}
そして、今度は
doSomething
:
int[] args = {1, 2, 3};
のようなものを使いたい。
doSomething (...args)
を呼び出すのではなく
doSomething(args[0], args[1], args[2])
.
関数の宣言で可能なのはわかりましたが、このような関数の実装は変更しないようにしたいのですが。
どのように解決するのですか?
Java言語にはこれを行う演算子はありませんが、Javaのクラスライブラリには必要な機能を備えています。
<ブロッククオート[OPのコメントより] Fooの開発者は、関数doSomethingが取る引数の数を自分で選ぶことができる。そうすれば、引数のバッグを作成し、メソッドに注入することができます。
使用方法 リフレクションAPI ということです。これは、引数を配列でパッケージ化する必要があります。個々のメソッド引数のラッピング/アンラッピングやメソッドの結果など、多くの余分な作業が必要ですが、実行時に署名を確認し、配列を構築し、メソッドを呼び出すことが可能です。
class Test {
public static int doSomething(int a, int b, int c) {
return a + b + c;
}
// This variable holds method reference to doSomething
private static Method doSomethingMethod;
// We initialize this variable in a static initialization block
static {
try {
doSomethingMethod = Test.class.getMethod("doSomething", Integer.TYPE, Integer.TYPE, Integer.TYPE);
} catch (Exception e) {
}
}
public static void main (String[] ignore) throws java.lang.Exception {
// Note that args is Object[], not int[]
Object[] args = new Object[] {1, 2, 3};
// Result is also Object, not int
Object res = doSomethingMethod.invoke(null, args);
System.out.println(res);
}
}
上記のコードは6を印刷する( デモ ).
関連
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] アニメーションGIFの表示
-
[解決済み] 文字列が一意な文字であるかどうかを判定する
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み】Javaでvarargsを使うのはどんなとき?