なぜ我々は、機能的なインターフェースで抽象メソッドをオーバーロードすることはできませんか?(Javaの)

Cyber​​_Agent:

だから私は、機能のJavaのインターフェイス、およびラムダ式とその使用に精通しています。機能的なインタフェースは、唯一の抽象メソッドを含めることができます。ラムダ式から、この孤独な方法を使用するときは、その名前を指定する必要はありません - インタフェースで唯一の抽象メソッドがあるので、コンパイラはそれはあなたが参照している方法です知っています。

例:

// Functional Interface:

@FunctionalInterface
public interface Ball
{
    void hit();
}

// Lambda to define, then run the hit method:

Ball b = () -> System.out.println("You hit it!");

b.hit();

機能インタフェースが一つだけ抽象メソッドを含めることができる理由、それは明らかですが、そのメソッドをオーバーロードすることはできませんなぜ、私は理解していません。

たとえば、次のようにコンパイルされません。

// (NOT) Functional Interface:

@FunctionalInterface
public interface Ball
{
    void hit();
    void hit(boolean miss);
}

// Lambda to define, then run the hit method:

Ball b = () -> System.out.println("You hit it!");
Ball ba = (boolean miss) -> System.out.println(miss);

b.hit();
ba.hit(false);

コンパイラの状態Ball、それが複数のメソッドが含まれていますが、これが問題になり、なぜこのような場合には、私は理解していないので、インタフェースが機能していない-の2つの方法は異なるパラメータを取るほどには長く、それを推測することが可能ですがどの方法私は私が定義するパラメータ内容に基づいてラムダに参照しています。

機能インタフェース内抽象メソッドをオーバーロードすることはできませんなぜ誰かが説明できますか?

ニューロン:

メソッドのオーバーロードせず言語では、方法は、一意(一瞬オーバーライド無視して)、そのクラスにその名前によって識別されます。

Javaでは、物事は少し異なるもののます。以下からの引用のOracleドキュメント

オーバーロードメソッド

Javaプログラミング言語支持体は、メソッドのオーバーロード、およびJavaは異なるメソッドシグネチャを持つメソッドを区別することができます。彼らは(「インターフェイスと継承」というタイトルのレッスンで説明される本にはいくつかの資格がある)異なるパラメータリストを持っている場合は、クラス内のメソッドが同じ名前を持つことができ、この手段。

私たちが知っているので、その方法はまた、彼らの署名によって識別されます。2つの方法が名前を共有するが、同じシグネチャを持っていない場合、彼らは異なる方法その共有の名前は、彼らが何らかの形で関係していると考えることにあなたをだますせてはいけません。

この事実を考慮すると、我々は簡単な方法は、あなたが説明した方法を振る舞った場合は未定義の動作が起こる例を作成することができます。

Ball ba = (boolean miss) -> System.out.println(miss);
someFunction(ba)
public void someFunction(Ball ball) {
    ball.hit();
}

あなたは、この場合にはどのような行動を期待しますか?これは、定義されていません!


次のことができます-しかし-のメイク使用デフォルトの方法これは適切なアプローチであれば、私は裁判官に十分あなたの状況を知らないが、あなたはこれを行うことができます:

@FunctionalInterface
public interface Ball
{
    default void hit() {
        hit(true);
    }

    void hit(boolean miss);
}

なぜ、この作品はで説明されているのドキュメントFunctionalInterface

概念的には、機能的なインタフェースは、1つの抽象メソッドを持っています。デフォルトのメソッドは実装を持っているので、彼らは抽象的ではありません

おすすめ

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