一般的なJavaの基本的な知識や操作関連インタビューの質問

なぜジェネリック(以下のような問題点を)使う?
1):ストアコレクション内の任意のタイプのデータが、Object型のこの時点では、取り出される強力な回転を持っている。
2):保存された要素の制約のセットこれは、同じデータ型でなければならない(データの同じタイプは、例えばTreeSetのクラスとして、比較することができる)。
3):設計点(ポイント)クラスは、座標位置カプセル化するために、座標位置は、String型.Integer /ダブル・タイプをサポートするために必要。

?ジェネリック医薬品が何であるかを第二に、
:Java5からジェネリック(GenericType)は、新しい構文をサポートするために始めた
1):。豊富なジェネリック型
で型を指定、不確実性のコードテンプレートの種類、コードのセクションを呼び出す:2)どのような。

三つのジェネリック医薬品:
ここに画像を挿入説明
ジェネリッククラス:直接定義されている一般的なクラス/インタフェースインチ
一般的な使用:
前と後の保証と同じタイプ。
リスト一覧新新=のArrayList(); //セットのみの文字列リストの種類を保存します要素
ので始まるJava7出口ジェネリックダイヤモンド構文<>からの前面と背面の同じタイプのため、。
リスト一覧=新しい新しいのArrayList <>();
一般的な継承関係は、(下記エラー)が存在しません。
リスト一覧=新しい新しいのArrayList() ; //エラーが
それ以来、コレクションの使用は、コレクション内の要素の種類を制限するためにジェネリックを使用していた。
逆コンパイル、見つかった:一般的な、実際にシンタックスシュガーを、下部には、まだ一般的なものではなく、まだ強いターンで。
ここに画像を挿入説明
4 :定義とは、一般的な方法を使用して
ジェネリックメソッド宣言で:一般的な方法を
方法のカスタムジェネリック戻り値の型が理にかなっているように、一般的に、この場合にはジェネリックでなければならないパラメータの着信を設定しますである。
特定の種類のパラメータのない一般的なセットが、この時の方法は、一般的に、オブジェクトへ返すように設計されていない場合。
例えばasList()クラスアレイツールの方法
ここに画像を挿入説明
V.一般的なワイルドカードと上部のみ理解し、ライン上の下限:( )
ジェネリック医薬品は、ワイルドカード:私はどのような種類がわかりません 受信された場合、この時間は??未知のワイルドカードを示すために使用されてもよい。
データのみを受信する。この場合、データセットに格納することができない。
ここに画像を挿入説明
上部ジェネリックと下限:タイプ要素はXのクラスを定義するために使用されなければなりませんまたは同じサブクラス、Xまたは同じ親。

VI及び消去汎用の変換:
一般的な消去:
1):一般的な消失(一般自動消去)、コンパイルした後、
2):ジェネリックとのセットは、汎用せずに割り当てられた場合。セット、一般的な場合は消去される(消去手動で)
ヒープ破損:
変数パラメータの使用の両方が、その後容易汚染問題につながるスタック場合、単一の汎用の方法を用いる。
として:asListにおける配列クラス方法:パブリック静的リストasList(T ... )。
ここに画像を挿入説明
インタビューの質問:
1.Javaジェネリック??でジェネリックを使用する利点は何
ジェネリック医薬品は、パラメータ化された型のメカニズムです。これは、より多くのライト共通コードので、例えば、フレームセット、コードの様々なタイプに適用することができます。
ジェネリック医薬品は、確認メカニズムのコンパイル時の型です。これは、コンパイル時の型の安全性を提供し、実行時に避けるためにClassCastExceptionが上にそのジェネリック型(通常は汎用コレクション)オブジェクトを使用するだけで、正しいタイプを確実にするために。

?どのようにJavaのジェネリックの仕事?型消去が何である2、
一般的な作業をするとき最初に型チェックのソースコードをコンパイルして、消去を入力するようにコンパイラに依存しており、パラメータが表示されるタイプの代わりに挿入達成するために、関連する指示をキャスト。
関連情報のいずれかのタイプが実行時に存在していないので、コンパイラは、コンパイル時に、関連するすべての種類の情報を消去します。たとえば、実行時の型でのみ一覧リストを表します。なぜそれを消去する必要がありますか?これは、拡張のタイプを避けるためです。

3.制限および非制限ワイルドカードワイルドカードの総称である何?
リミテッドのワイルドカードの種類は限られていました。2つのワイルドカードを定義する、1はTのサブクラス**セットタイプにバインドされなければならないタイプを確保することで、<** ** Tを拡張する?>であり、他方は?**スーパー<です* * T>型Tの親クラスの確保が設定されなければならないことで下界タイプ**。一般的なタイプは、それ以外の場合は、コンパイルエラーが発生します、制限内の型で初期化する必要があります。<?>任意の型の代わりに使用することができますので、一方<?>、非限定的なワイルドカードを表します。

4.List <?Tを拡張>とList <?スーパーT>の違いは何ですが?
これらの2つのリストの宣言は、限られたワイルドカードある例では、List <?Tは拡張>あなたはリストから任意の型Tの継承を受け入れることができます一覧<?スーパーT>しながら、リストTは、構成任意の親クラスを受け入れることができます。例えば、リストの<?数が伸び>リストまたはリストを受け入れることができます。あなたが表示され、この接続段落でより多くの情報を見つけることができます。

5.それは?一般的なパラメータを受け入れ、ジェネリック型を返すことができるように汎用的なメソッドを記述するためにどのように
一般的な方法を記述するには難しいことではありません、あなたの代わりに、このようなT、EまたはKを使用するなどのプリミティブ型のジェネリック型を使用する必要があり、Vもう一方は広くプレースホルダの種類を認識しました。Javaコレクションフレームワークの一般的な方法の例を参照してください。最も単純な場合では、一般的な方法は次のようになります:
パブリックVのPUT(キーK、V値){
戻りcache.put(キー、値);
}

7.書き込みは?LRUキャッシュを実装するための汎用的なプログラム
のJavaのようにこれをプログラミングする人々のためには、運動のと同じです。あなたにヒントを与えることが最も古いキャッシュキーと値のペアを削除されるとき、のLinkedHashMap LRUキャッシュは、LRUキャッシュがいっぱいになると、一定の大きさを実装するために使用することができます。LinkedHashMapは)removeEldestEntry(と呼ばれる方法を提供し、この方法は、(置かれる)と、最も古いのペアを削除するのputAll()の呼び出し。

8.あなたは一覧リストのパラメータが何受け入れるメソッドに渡すことができますか?
ジェネリック医薬品に精通誰もいないために、このJavaのジェネリックトピックは混乱と思われる、リストを必要な場所リストを使用する必要がありますが、そうではないので、一見の文字列は、オブジェクトであるためです。本当にそうコンパイルエラーになります。あなたが深いステップを検討する場合は、リストのみの文字列を格納するために使用することができますしながら、リストなどの文字列、整数、を含む任意のタイプのオブジェクトを格納することができますので、Javaは、理にかなっていることがわかります。
ObjectListリスト;
リストSTRINGLIST;
objectList = STRINGLIST; //コンパイルエラー互換性のないタイプ

9.Arrayは、ジェネリックを使用することができ、それ?
アレイ事実はジェネリックをサポートしていない、リストが安全保障のタイプはコンパイル提供することができ、かつ配列ができないので、代わりに配列のリストを使用することをお勧めします。

11、Javaのリストとリストのプリミティブ型の区別は?
元の型と型パラメータとの主な違いは、元のコンパイル時の型で型セキュリティチェックを実行しないコンパイラが、型パラメータでは次のようになりますチェックは、オブジェクトタイプとして使用することによって、コンパイラは、プロセスは、文字列または整数として、オブジェクトの任意の型を受け入れることができる通知してもよいですこの質問はポイントにオリジナルのジェネリック型の正しい理解を検討することです。両者の差の2点目ということであるあなたは、生タイプのリスト方法を受け入れるように任意のジェネリック型引数を渡すことができますが、それはコンパイルエラーが生成されますので、それは、受け入れられた方法のリストにリストを渡すことはできません。

12の違いは何ですか、リスト<?>、リスト内のJavaは?されている
リストは、<?>リストの種類は不明であるが、一覧リストの実際のいずれかのタイプです。あなたがリストを置くことができ、リストに割り当てられたリストは、<?>、一覧リストに割り当てることはできません。
<?>リストlistOfAnyType;
リストlistOfObject =新しい新しいのArrayList();
リストlistOfString =新しい新しいのArrayList();
リストlistOfInteger =新しい新しいのArrayList();

listOfAnyType = listOfString。//法的
listOfAnyType = listOfInteger。//法的
listOfObjectType =(一覧)listOfString。//コンパイルエラー-で、コンバーチブルタイプ

13、およびプリミティブ型の区別一覧リスト。
ような質問「元の型および型パラメータの違いは何ですか。」パラメータの型とタイプセーフであるが、それはコンパイラによる安全保障の一種ですが、生タイプのリストがタイプセーフではありません。あなたは、リストの中に外部のオブジェクト型String型の文字列の他のタイプを置くことができない、あなたは、元のリストに保存されている任意の型のオブジェクトを置くことができます。あなたがキャストである必要はありませんが、プリミティブ型のため、明示的な型変換が必要になりますパラメータを持つジェネリック型を使用します。
ListOfRawTypesのArrayList =新しい新しいリスト();
listOfRawTypes.add( "ABC");
listOfRawTypes.addは(123); //これは、コンパイラができます- Shique異常動作の
文字列の項目=(文字列)listOfRawTypes.get( 0)。 //明示的な型変換に必要な
項目=(文字列)listOfRawTypes.get(1 ); // ClassCastExceptionがスロー、整数列ために変換することができません

ListOfString ArrayListを=新しい新しいリスト();
listOfString.add( "ABCD");
listOfString.add(1234); //コンパイルエラー、より良い実行時に例外を投げるよりも
項目= listOfString.get(0); //明示的な型変換-コンパイラが自動的に変換します

公開された99元の記事 ウォンの賞賛2 ビュー2606

おすすめ

転載: blog.csdn.net/weixin_41588751/article/details/105299622