APIを設計するときに、インターフェース(1つの抽象メソッドを含むように起こる)に "@ FunctionalInterface"という注釈を付けることがあるという警告に直面することがよくあります。なぜ@NotFunctionalInterfaceはありませんか?
それは多くの場合だけでなく、このようなもので、カスタムリスナー(ややActionListener
のような)で発生:すべてのこれらのインターフェースは、共通している
public interface CommunicatorEnumerator {
List<Communicator> enumerateCommunicators();
}
ことの一つは、誰かが追加されることを排除するものではないということです将来のより抽象的な方法。理想的には、このようなインターフェイスがlambdaで使用されないようにしたいのです。
@SuppressWarnings("InterfaceMayBeAnnotatedFunctional")
を持つと、ラムダの使用が妨げられません。私はそれらを「機能していないインターフェイス」とマークしたいと思います。
なぜ、インターフェイスのラムダ使用を妨げる構造(アノテーションである必要はありません)がありませんか?
を拡張心配、それは適用されません。警告を無効にしないだろうとにかくあなたのAPIを壊してしまっています(インターフェイスを実装している誰でもメソッドを追加する必要があります)。 – Jesper
サブインターフェースを持つFunctionalInterfaceをさらに多くのメソッドで拡張することができます。これはあなたのIDEでの単なる警告です、あなたはそれをオフにすることができます。 –
@マークこれについての使用例はありません。 クライアントコードでクラスを使用できないようにするには、可視性修飾子を使用します(パッケージをプライベートにするか、外部型でラップする場合はクラスプライベートにすることができます)。 API *内でクラス*の使用を拒否するには、開発者がコード自体に完全にアクセスでき、必要な変更を行うことができます。意図した用途を文書化するだけかもしれませんが、それはそれです。 –