-2

Javaコンパイラを自動的にキャストするように変更することのマイナス面や問題の可能性はありますか? 以下の例では、list.get(0) の結果が変数 hi の型に自動的にキャストされます。

List list = new ArrayList();
list.add("hi");
String hi = list.get(0);

ジェネリックを使用するとキャストを減らすことができることは知っていますが、宣言をより困難にするという犠牲を払っています。私にとって、ジェネリックの利点は、コンパイラーがより多くのルールを適用できるようにすることです。ジェネリックはキャストを減らすのではありません (ただし、あまり使用していないため、多少情報がありません)。この提案は、入力するコードの量を減らすだけで、別の場所に移動することはありません。また、コレクションが異なるオブジェクトを持つ可能性があるため、ジェネリックを使用できない場合もあります。それが現在の使用法に基づいて「あまりにも驚くべきものに見える」場合は、それを使用するための構文の調整が必要になる可能性があります。

から: http://jamesjava.blogspot.com/2007/01/automatic-casting.html

4

6 に答える 6

6

キャストは、型の安全性を無視するよう Java コンパイラに明示的に指示するものであるため、自動キャストを許可すると、意図的に言語に設計された機能の 1 つが削除されます。

個人的には、コンパイラの警告とエラーが好きです。なぜなら、実行時にこの種の問題を見つけるのははるかに難しいからです (コンパイラがあるオブジェクト タイプを別のオブジェクト タイプに強制することができたと仮定すると)。

于 2008-09-19T03:01:34.757 に答える
5

はい、コンパイル時に現在検出されているエラーを、実行時に検出されるように移動します。一部の人はこれを大きな欠点とは考えていませんが、それらの人々は Java ではなく Python、Ruby、または Perl を使用しています ;-)。

于 2008-09-19T03:06:35.943 に答える
4

例でジェネリックを使用する最大の利点は、実行時エラーがコンパイル時エラーに変わることです。

List list = new ArrayList();
list.add(new Integer(42));
String hi = (String) list.get(0); // run time error

List<String> list = new ArrayList<String>();
list.add(new Integer(42)); // compile time error
String hi = list.get(0);

実行時エラーはユーザーに表示され、コンパイル時エラーはプログラマーに表示されるため、コンパイル時エラーははるかに優れています。

あなたの質問に答えるために、キャストが自動的に行われた場合、劇的な失敗はありません(そして、あなたの例では実行時に ClassCastException がまだスローされていました)。明示的なキャストを要求することの利点は、コーダーが自分のしていることを考え、キャストが行われていることを認識しなければならないことです。

また、コレクションが異なるオブジェクトを持つ可能性があるため、ジェネリックを使用できない場合もあります

ワイルドカードを使用して、さまざまなオブジェクトをジェネリック コレクションに追加することもできます。

于 2008-09-19T03:13:25.740 に答える
1

後で戻ってきてあなたを噛む気がするので、私はそれを避けます. 私の意見では、ジェネリックは手間をかけるだけの価値があります。また、さまざまなオブジェクト タイプを保持するコレクションに「コンテナ」オブジェクトを使用することはそれほど難しくありません。

于 2008-09-19T03:03:04.517 に答える
1

型チェックは良いことのように思えます。自動キャストは、潜在的に有用なコンパイル時エラーを取り除きます。

キーストロークの数が心配な場合は、タイプ キャストをダブルクリックで挿入できる Eclipse などの IDE を使用できます。

于 2008-09-19T03:03:18.637 に答える
0

他の人が言ったように、自動型キャストは型の安全性を排除します。ジェネリックには複数の利点があり、宣言するのはそれほど難しくありません。Eclipse では、ジェネリック変数を宣言するだけで、インスタンス化でオートコンプリートを使用でき、使用した型が自動的に入力されます。さらに、あなた (あるいはもっと重要なことに、他の誰か) は、リストに何が含まれているかを一目で正確に知ることができるという利点があります。

于 2008-09-19T04:59:26.517 に答える