私はClass
とMethod
の両方をパラメータとしてメソッドに渡す方法を検討しています。繰り返したいコードを繰り返しています。クラスとメソッドをパラメータとして渡す
public static void methodName(Class C, Method m) {
C.m.sendKeys("item");
}
はこれが可能である:
私はこのような何かをしたいですか?
私はClass
とMethod
の両方をパラメータとしてメソッドに渡す方法を検討しています。繰り返したいコードを繰り返しています。クラスとメソッドをパラメータとして渡す
public static void methodName(Class C, Method m) {
C.m.sendKeys("item");
}
はこれが可能である:
私はこのような何かをしたいですか?
はい、これにはConsumer<...>
を使用できます。例えば:ここで、
MyClass mc = new MyClass();
methodName(mc::methodToPass);
または、BiConsumer<...>
を使用して:これはまた、構文を使用してインスタンスメソッド、のために働く
methodName(MyClass::methodToPass);
:
class MyClass {
public static void methodToPass(String arg) {...}
}
public static void methodName(Consumer<String> cons) {
cons.accept("item");
}
は次にように呼び出します最初の引数が渡される場合は、メソッドを呼び出すインスタンスでなければなりません:
methodName(MyClass::methodToPass);
public static void methodName(BiConsumer<MyClass, String> cons) {
MyClass mc = ...;
cons.accept(mc, "item");
}
これは、限り、あなたが呼び出しているメソッドは、Consumer<...>
の型パラメータとして指定したタイプの一つの引数を取るように動作します。
Consumer<...>
のような利用可能なインターフェイスが、java.util.functionパッケージのさまざまな種類のメソッドに対応しています。
Java 8では、ラムダとして渡されたメソッド参照を使用できます。
methodName(C::m);
あなたは、関数の型(引数と戻り値)を指定し、既存の機能のインタフェースのいずれかを使用するか、独自に定義する必要があります。
あなたの関数はブール値を返し、入力として、クラスTのオブジェクトを受け取りたとえば場合は、事前に定義された機能的なインターフェースPredicate
使用することができます。java 8で
public static void methodName(Item item, Predicate<Item> p) {
p.test(item);
// ...
}
ないが、あなたは匿名の実装とのインターフェイスを渡すことができます初期バージョン – Benedictus