Javaの8メソッド参照:どのように取るためにどの方法を決定するには?

Mulgard:

私たちは、次のクラスを考えてみましょう:

public class NameCreator {

    public String createName(String lastname) {
        return lastname;
    }

    public String createName(String lastname, String firstName) {
        return lastname + " " + firstname
    }

    ...
}

私は、Java 8メソッド参照を経由して、それを呼び出すようにしたい場合:

NameCreator::createName

私は、エラーが発生します。

Cannot resolve method createName

どのように私は私が呼ばれるようにしたいこれらのメソッドのどれを定義することができますか?

マイケル:

NameCreator::createNameこの方法は、静的(下表の種類#1)のいずれかこと、または機能的インターフェイス対象はまた、(例えば、種類#3クラスのインスタンスを取ることを意味します
BiFunction<NameCreator, String, String>)。あなたのメソッドは静的ではありません、ので、おそらく、あなたの目標は、あなたが「することはできません解決方法」エラーを取得する理由である、インスタンスを負いません。あなたは、おそらく上のメソッド参照を使用したい場合(一種#2)。クラス内から、使用することができます。

Function<String, String> func = this::createName

あなたが使用することができ、クラスの外から:

NameCreator creator = new NameCreator();
Function<String, String> func = creator::createName;

一次元又は2パラメータバージョンが使用されているかどうかに関しては、それは機能的なインターフェースが対象とされているものに依存します。ため、上記の、あなたの最初のメソッドを使用しますFunction<String, String>文字列を受け取り、文字列を返します。以下の機能インタフェースは、一例として、あなたの第二の方法を使用します。

NameCreator creator = new NameCreator();
BiFunction<String, String, String> func = creator::createName;

:参照してくださいFunctionBiFunctionと、全体のjava.util.functionパッケージ

また、に興味がある可能性がありメソッド参照上のJavaチュートリアル、特にこの部分:


メソッド参照の4種類があります。

Kind                                                   | Example
==============================================================================================
Reference to a static method                           | ContainingClass::staticMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of a particular object | containingObject::instanceMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of an arbitrary object | ContainingType::methodName
of a particular type                                   |
-------------------------------------------------------+--------------------------------------
Reference to a constructor                             | ClassName::new
==============================================================================================

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172338&siteId=1