Java 8のメソッドのグループを参照する方法はありますか?そのシグネチャはオーバーロードの方法によって異なりますか?Java 8のメソッド参照:オーバーロードがサポートされていますか?
より正確には、私はこのコードが動作したい:
public class OverloadingMethodRef
{
public static void foo (int x) {
System.out.println ("An integer: " + x);
}
public static void foo (String x) {
System.out.println ("A String: " + x);
}
/**
* I want it to work without this
*/
// public static void foo (Object x) {
// if (x instanceof Integer) foo ((int) x); else foo ((String) x);
// }
public static void main (String[] args)
{
// Compile error, it wants a precise reference to one of them
Consumer<Object> c = PolymorphicMethodRef::foo;
foo ("bla"); // despite it could get it
foo (1); // and here too
}
}
私は別のメソッドに渡す方法がたくさんあると私は書きたくないので、私は、public static void foo (Object x)
を追加する余裕がありませんラッパー。これまでは、リフレクション(param.getClass()
を受け取ることができます)を介してのみこれを行うことができましたが、呼び出す必要のあるメソッドはさまざまな引数(> = 1)を持ち、配列に入れたり、
はい多型がサポートされています。また、それは多形性ではなく、**過負荷です**。コンパイル時に特定のメソッドオーバーロードへのJavaワイヤメソッド呼び出しがあります。 –
おしゃべり!はい、私は過負荷を意味し、私は、問題を修正、ありがとう。 – zakmck
オーバーロードされたメソッドを指しているかのように動作するメソッド参照を取得することは、実際には不可能です。あなたができることは、 'void foo(Object x)'のような別のメソッドを追加してコンシューマを取得することですが、常にObjectメソッドを使ってそのメソッドを呼び出すことはできません。 –