web-dev-qa-db-ja.com

事前定義された機能インターフェイスにコンテキスト名を付けるのは良い考えですか?

私は現在Java 8を使用していて、関数型インターフェースを頻繁に使用しています。私はよく次のようなコードを書いています。

public interface MessageHandler extends Consumer<String> { }

これは、JavaをC#のように感じさせるために、関数型インターフェースを悪用していることを示す良い考えですか、それとも指標ですか?

編集:たぶん少し拡張する:

public class MessageGenerator {

    public void registerMessageHandler(MessageHandler handler) { 
    // [...]

    public interface MessageHandler extends Consumer<String> { }
}
1
Janis F

私はこれに心から同意します:

インターフェイスには、一般的な構文上のアイデアではなく、ほとんどの場合、その機能に基づいて名前を付ける必要があります。

(この回答から取得: https://softwareengineering.stackexchange.com/a/276866/41811

したがって、基になるConsumer<String>が何に使用されるかを正確に説明する名前の関数型インターフェースを追加することは、非常に良い考えです。害はなく、読みやすさが向上します。

4
Mike Nakis

セマンティクスを変更せずにコードを読みやすくするものは何でも良いです。これが他の言語での経験によるものかどうかは関係ありません。プログラミング言語は目的を達成するためのツールであり、それ自体の価値ではありません。

したがって、ギナオ語で提供されているタイプを使用するよりも、物事の書き方が読みやすい場合は、それを実行してください。 (タイプの別のレイヤーを追加すると、実際に実行されるコードの効率に影響する場合は状況が異なる可能性がありますが、この場合はそうではないと確信しています。)

2
Kilian Foth