または、言い換えれば、次のようなものの何が問題なのか -
new Method[] {Vector.add(), Vector.remove()}
Eclipse は、引数が必要だと言い続けます。しかし、私は明らかにメソッドを呼び出したくありません。オブジェクトとして使用したいだけです! 何をすべきか?
または、言い換えれば、次のようなものの何が問題なのか -
new Method[] {Vector.add(), Vector.remove()}
Eclipse は、引数が必要だと言い続けます。しかし、私は明らかにメソッドを呼び出したくありません。オブジェクトとして使用したいだけです! 何をすべきか?
これは機能します。これで何をしているのだろうと思わずにはいられません。
new Method[] {
Vector.class.getMethod("add", Object.class),
Vector.class.getMethod("remove", Object.class)
};
まず、ここで構文を作成しています。私のjavadocには「Vector.add()」はありません。
あなたはこれを行うことができます:
Method [] methods = Vector.class.getMethods();
ただし、これらのメソッドを実行することはできません。ここにはクロージャーや関数オブジェクトはありません。
それはうまくいきます:)
これを使用して、可変数の「スタックされた」ループ (ループ内のループ内のループ) をインスタンス化しています。
開始インデックス、制限、メソッドを呼び出すオブジェクト、最後にメソッドの配列と引数の配列を渡す静的メソッドがあります。
編集: 大まかなコード - 書くのに 3 分かかったので、おそらくそこには何か非常に悪いものが潜んでいますが、一般的な考え方は明らかだと思います。
public static void loop(int start, int lessThan, Object obj, Method[] methods, Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
lastLoop++;
for(int i = start; i < lessThan; i++) {
for(int j = 0; j < methods.length; j++) {
methods[j].invoke(obj, args[j]);
}
}
}
この全体を何に使用しているのか疑問に思っている場合は、要素の数が位置の数よりも少ない順列を行う方法をいじっているだけです。可変数のループ (位置の数によって異なります) を定義しようとして問題に遭遇したので、これで回避することにしました。