私はいつも、コレクションを宣言するときにInterface ob = new Class()
を学びます。たとえば、LinkedListを使用したい場合は、List ob = new LinkedList()
を実行しますが、アクセスできません。 LinkedListのすべてのメソッド..LinkedList ob = new LinkedList()
は100%正しくありませんか?
はい、
LinkedList<...> items = new LinkedList<...>();
items
がLinkedList<T>
インターフェースでキャプチャされないList<T>
のメソッドに依存することがわかっている場合は、完全に正しいです。
宣言は常に最高レベルに保つようにしてください可能つまり、必要なすべての機能を提供する最高レベルで停止する必要があります。List
メソッドが十分でない場合、LinkedList
宣言はまったく問題ありません。
「常にインターフェースにコーディングする」というルールは、ある程度の柔軟性を持って採用する必要があります。あなたが提案していることは問題ありません、そしてあなたが結論に達したとき、唯一の選択肢です。
ちなみに、このような具象クラスへのコーディングは、ほとんどのJVMの方が高速です。パフォーマンスがルールを破る価値があるかどうかを判断するのは難しいことです。
Listインターフェースにないメソッドを実際に使用する必要がある場合は、LinkedListのAPIを使用しても問題はありません。リストインターフェイスへのプログラミングの一般的なルールは、1)これらのメソッドが必要になることは非常にまれであり、2)ほとんどの人の経験では、リストを並べ替えたり、ランダムに多く使用したりする必要があることに気付く可能性が高いことを認識しています。 LinkedListだけが持っているメソッドの1つが必要なのですが、アクセスして、ArrayListに切り替えることにしました。
リストが必要なものを提供していないことがわかった場合は、キューインターフェイスにプログラミングしている可能性もあります。
LinkedListはジェネリックです。あなたはするべきです:
LinkedList<String> linkedList = new LinkedList<String>();
(または文字列の代わりにそこに保存する必要がある他のもの)
正確に100%正しいわけではありません。
コレクションを宣言するための好ましい方法は、コレクションが保持しているデータ型を含めることです。したがって、あなたの例では、それはLinkedList<Integer> ob = new LinkedList<Integer>();
になります。
いいえ。これは間違っています。後の段階で、リンクリストからリストタイプの他の実装に実装を変更したい場合は、うまくいきません...したがって、インターフェイスレベルの宣言を使用することをお勧めします。
listを使用してLinkedListメソッドにアクセスすることもできます。たとえば、キャストを入力するだけです。
((LinkedList)ob).add()
LinkedListではなくジェネリックリストを使用するポイントは、使用しているリストのタイプを変更した場合(たとえば、ダブルリンクリスト)、プログラムは引き続き機能するためです。ジェネリックは、コードを単純化して、より移植性が高く、より「変更可能」にすることです。
ジェネリックスを使用することを常にお勧めするわけではありません..... Coz時々、ここのように異なるオブジェクトをラップする必要があるかもしれません....
String str="a string";
boolean status=false;
LinkedList ll = new LinkedList();
ll.add(str);
ll.add(status);
RMIの場合のようないくつかの状況では、uはシリアル化されたデータしか送信できません.....そしてクラスオブジェクト(シリアル化されていない)を送信したいとします.......そこでクラスのメンバーをラップできます(プリミティブ)をLinkedListに入れて、そのオブジェクト全体を渡します.......膨大な数の引数について心配する必要はありません......たとえば、次のことを考慮してください。
public Class DataHouse
{
public int a;
public String str;
.
.
.
}
今どこかであなたはオブジェクトを渡す必要があります....あなたは次のことをすることができます....
DataHouse dh =new DataHouse();
LinkedList ll = new LinkedList();
ll.add(dh.a);
ll.add(dh.str);
// Now the content is serialized and can pass it as a capsuled data......