インタフェース、ラムダ式、および内部クラス - 10(d)を読み取るJavaのコア技術

インタフェースの概念

インタフェースは、オブジェクトのためのより多くの機能を提供します。インタフェースメソッドは、パブリックに属し自動的にインターフェイスメソッドで宣言されたときにそのため、キーワードを提供していません。そして、インタフェースはインスタンスフィールドを含めることはできません。
クラスが実装する必要があり、対応するインターフェイスメソッドを、可視クラスのパッケージへのパブリック、メソッドのデフォルトを宣言しました。
たとえば、あなたがオブジェクトのソート機能を呼び出したい、あなたは同等のインタフェースを持っている必要がありますと同等で達成するために特定のクラス・インタフェース・メソッドが必要です。ソートコール:Aarry.sort(オブジェクト)

主な理由は、インターフェイスが強く型付けされた(強く型付けされた)言語であるJavaプログラミング言語を必要とすることです。チューンで方法と時間、コンパイラは、この方法が存在するかどうかをチェックしますインターフェイスは、メソッド、変数のこのタイプの存在を保証します。

インターフェイスは** **「対称」のルールに準拠していません。xはEmployeeオブジェクトである場合、yはManagerオブジェクトで、
コールx.compareTo(y)が例外をスローしない、それだけのxとyのですが、比較のために、従業員のとおりです。しかし、今度は、
y.compareTo(X-)は、ClassCastExceptionがスローされます。次のように解決策があります:
(1)サブクラスの意味との間の比較は同じではありません、オブジェクトの異なるクラスを比較することは違法です、。各compareToメソッドは、次の開始時に検出されなければならない:IF(getClassO = other.getClassO!)スロー新しい新しいClassCastExceptionO;
(2)意味として比較があれば、そのような一般的なアルゴリズムが存在する場合、それは、2つの異なるサブことが可能ですクラスオブジェクトが比較され、スーパークラスにcompareToメソッドを提供し、この方法は最終的なもので宣言する必要があり、

インターフェイス機能

インタフェース、およびインタフェースクラスを実装するオブジェクトを参照するインタフェース変数を定義することができます。あなたは利用することができるのinstanceof検出対象インターフェイスタイプ
のインターフェイスは同じタイプを使用して、拡張し、継承できる拡張します .. 第二に、インタフェースドメインは自動的にパブリック静的最終的な、すなわち、定数として設定されています。

これは、インターフェイスの静的メソッドを向上させることができますが、インターフェイスと心を拡大するには、同じではありません。

提供するインタフェースのメソッドデフォルトの実装をあなたはしなければならないデフォルト修飾子ラベルなどのA方式。デフォルトの方法ではカバーされるユーザーは方法のいくつかを心配することができ、いくつかのケースでは、より便利。デフォルトの方法が可能、他のメソッド呼び出しへのインターフェイス

インタフェースは、対応する数の持つ関連クラス関連するそれぞれのクラスが実装するインターフェースの方法のいくつかまたは全てようCoUection / AbstractCollectkmとして、またはのMouseListener / MouseAdapterのを。Java SE 8で、技術が時代遅れになっています。この方法は現在、インタフェースに直接達成することができます。=「デフォルトのインターフェース方法があることを保証することができるソースコードの互換性

紛争解決するデフォルトの方法:少なくとも一つのインタフェースがある場合、(1)スーパークラスの優先順位(2)競合を解決するためのインタフェースをカバーするには実装を提供し、コンパイラはエラーを報告しますが、プログラマは、この曖昧さを解決する必要があります

Javaオブジェクトを使用することによって達成されるコールバッククラスをオブジェクトはインターフェイスが属する渡されたコールバックオブジェクトの実装が属する必要です。
第二のバージョンは、Arrays.sort方法がアレイとコンパレータ(であり、コンパレータ)、コンパレータソート処理を渡すオブジェクトを使用して、カスタムの比較を達成します。これは、単語[I] .compareTo(単語[呼び出す J])を比較のために。比較対象にこの方法を比較するために、
代わりに文字列自体に呼び出すのでは、上の呼び出すために

オブジェクトのクローン作成

なぜオブジェクトが上のオブジェクトから継承された保護されたcloneメソッドにアクセスすることはできませんか?
スコープ// Javaパッケージは、アクセス保護された制限とデフォルトに影響を与えます。異なるパッケージの元の特性を回復、保護、およびデフォルトは、プライベート促進されます。
メンバーまたは方法のための分子のクラスに、保護されたスーパークラスは、同じパッケージ内にあります。そして、同じ基本クラスのサブクラスパッケージにのみアクセスすることができない基本クラスの保護のメンバーから継承された自分ではなく、アクセスすることはできません自体はメンバー保護された基底クラスのインスタンス(例えばanObeject.cloneを))。同じパケットは、保護された、とすると国民は同じです。実際には、唯一のメソッド呼び出しに続いてCloneメソッドを呼び出すことができるオブジェクトは、特別な規定を持っています

/**
     * @return     a clone of this instance.
     * @throws  CloneNotSupportedException  if the object's class does not
     *               support the {@code Cloneable} interface. Subclasses
     *               that override the {@code clone} method can also
     *               throw this exception to indicate that an instance cannot
     *               be cloned.
     * @see java.lang.Cloneable
     */
    @HotSpotIntrinsicCandidate
    protected native Object clone() throws CloneNotSupportedException;

Object.clone()メソッドは、ネイティブメソッドが非コールインタフェースのJavaのJavaコードで、簡単に言えば、ネイティブメソッドです。我々は、オブジェクトのクローン操作したいとき、Javaへの独自のコードではなく、Object.clone()メソッドを使用することをお勧めしている理由であるはるかに速いスピードを実行しているあなた自身の書かれたプログラムよりもするネイティブメソッドの一般的な割合、 (あなたはまた、所望の結果を達成することができますが)、このような機能を実現しています。
@throwsの背後にあるコンテンツについて説明Cloneableインタフェースまたはクローンメソッドをオーバーライドしようとしているのサブクラスを実装していないクラスは、例外CloneNotSupportedExceptionをスローした場合
、元のリンクをします。https://blog.csdn.net/qq_41409138/article/details/86762163

Cloneableインタフェースは、Java用のセットによって提供されるマーカーインタフェース、インタフェースは任意のマーキング方法が含まれていません。その唯一の役割は、instanceofはタイプのクエリで許可されています。
オブジェクト要求クローン場合クローニングのためのオブジェクトは、「被害妄想」でしたが、このインタフェースを実装していない、それは
チェック例外を生成します。

ランバダ式

関数型プログラミングコードブロックは、着信マウスイベント処理機能を含む、例えば、直接処理することができます。
ラムダ式は、変数がコードや仕様子孫なければならないコードの実行のブロック
ランバダ発現は、インタフェースオブジェクトを定義することなく、インタフェースオブジェクトの等価速記法です。換言すれば、ラムダ式は、これらのインタフェースと互換性がある
唯一のための、場合ラムダ発現提供することができるようなインターフェースを必要とする一つのインタフェースの抽象メソッド
タイプ。このインターフェイスは、インターフェイス関数と呼ばれ

、例えば、コンパレータ方式にのみインターフェイスは、比較器インタフェースの書き込みが可能であり、:
は、Arrays.sort(惑星、(第一、第二) - >まず.lengt() - SECOND .LENGTH()); / /惑星は、文字列、文字列オブジェクトとして推定第一及び第二の変数であります

タイマt =新しいタイマ(1000 Systei.out ::のprintln);
発現のSystem.out ::のprintlnである方法基準ラムダ式X>のSystem.out.println(Xと等価である(方法参照)、 )

コンストラクタの参照やメソッドの参照は非常に似ていますが、この方法は、新しいと呼ばれます。例えば、人::新しい人のコンストラクタへの参照です。どのコンストラクタのですか?文脈によって。
それが変更されますので、Javaが制限されています、あなたはジェネリック型Tの配列を構築することができない、表現の新しいT [n]は、エラーが発生します新しい新しいオブジェクト[N-]

:ラムダ式は、3つの部分
、1)コードのブロック
2)のパラメータ;
3)ノンパラメトリック変数を参照し、コード内で定義されていない自由変数の値を、。そして、用語変数値の空きブロック:閉鎖(閉鎖)。ラムダは閉鎖ですラムダ式では、唯一できる基準値は変更されません変数を。

可変ラムダ式は、実際には、最終的な変数(effectivelyfinal)に捕捉されなければなりません。
ラムダ式は、ブロック体を入れ子にして同じスコープを持っています。

キーラムダ式は遅延実行(遅延実行)です。

コンパレータインタフェースは、コンパレータを作成するのに便利多くの静的メソッドが含まれています。たとえば、次のように
は、Arrays.sort(人、Comparator.comparing(人:: getLastNameの).thenConiparing(PE rson :: getFirstName));

公開された15元の記事 ウォンの賞賛1 ビュー133

おすすめ

転載: blog.csdn.net/qq_17236715/article/details/103842197