ビデオ: Java教材 Java基礎講座「 プログラムはどこに書くの?」【アテイン株式会社】 2024
Javaの最初の設計目標の1つは、言語を可能な限りシンプルに保つことでした。言語の開発者は、C ++の不必要に複雑な機能をいくつか取り、それらをウィンドウの外に投げ込んだ。結果は、エレガントで洗練された言語でした。言語があまりにも洗練されていると言う人もいました。
数年にわたる議論と喧嘩の後、Javaはもう少し複雑になりました。 2004年までに、Javaには列挙型、拡張forループ、静的インポート、その他の興味深い新機能がありました。しかし、最も話題の新機能はジェネリックの導入でした。
<! - 1 - >ArrayList people = new ArrayList();
Java 5のようなものを使ったのは新しいものでした。古いスタイルのJavaでは、
ArrayList people = new ArrayList();
当時、ArrayListには、数字、勘定科目、部屋、文字列など何でも保存したいものがほとんど格納されていました。 ArrayListクラスは非常に汎用性がありましたが、この多才さでいくつかの頭痛がありました。何かをArrayListに入れることができれば、ArrayListから何を得るのか簡単に予測できません。
<! - 2 - >特に、ArrayListに特定の型の値を格納していると想定したコードを簡単に記述できませんでした。次に例を示します。
ArrayList things = new ArrayList();もの。追加する(新しいアカウント());アカウントmyAccount =もの。 get(0); //これを使わないでください。それは悪いコードです。
第3行目では、get(0)を呼び出すとthingsコレクションの最も早い値が取得されます。 get(0)の呼び出しは大丈夫ですが、コンパイラはmyAccountへの割り当てを試みます。 3行目に、あなたが物事リストから得たものがmyAccount変数に詰め込まれないというメッセージが表示されます。
genericListの導入により、この問題は解決されます。
ArrayList
things = new ArrayList ();もの。追加する(新しいアカウント());アカウントmyAccount =もの。 get(0); //このコードを代わりに使用します。それは良いコードです。 2つの場所を追加すると、アカウントインスタンスがストアされていることがコンパイラに通知されます。したがって、前のコードの3行目では、thingsコレクションから値を取得します。その後、物はAccountオブジェクトだけを格納するので、myAccountをその新しい値に参照させることができます。
<! - 2 - >
Java 5.0ではJavaにジェネリックが追加されました。しかし、Java 5.0の誕生直後、プログラマーはジェネリックスのコードがどれほど難しいのか気づいた。結局、ジェネリックの中でジェネリックを作ることができます。 ArrayListには一連の配列を含めることができ、各配列はArrayListにすることができます。したがって、ArrayList
mess = new ArrayList();を書くことができます。 その混乱宣言のすべての繰り返しは、プログラマーに頭痛を与えます!この醜さを避けるために、Java 7以降のバージョンには
ダイヤモンド演算子 、 があります。ダイヤモンドの演算子は、Javaに、ジェネリック宣言の前の部分にあなたが入れた不思議な複雑なものを再利用するように指示します。 <! - 3 - >
この例では、を1回だけ書き込んでも、
mess = new ArrayList(); Java 7以降では、これらの混乱宣言のいずれか、つまり、ArrayList []が2回出現した元の厄介な宣言、またはダイヤモンド演算子とArrayList []の1つのみの合理化された(穏やかで厄介な)宣言を書くことができます。発生。
はい、合理化されたコードはまだ複雑です。しかし、すべてのArrayList []の繰り返しがなければ、合理化されたコードはあまり煩雑ではありません。 Java 7のダイヤモンド演算子は、間違って何かをコピーしてコードに大きなエラーがあるというチャンスを逃してしまいます。