7

ArrayList of objectsデータベースからデータを取得している状況があり、それをアップキャストしてから、別のカスタムArrayListなどList<User>にダウンキャストしたいと思います。List<Groups>

私の質問は、オブジェクトにアップキャストしてからArrayListにダウンキャストすることです。コストはどうなりますか。それは効率的ですか、それとも良い習慣ですか。

編集済み

データを取得するのではなく、必要に応じて一度だけList<User>, List<Groups>データを取得したいので、後でArrayList<objetcs>データをダウンキャストします。ArrayList<User>, ArrayList<Groups>

4

5 に答える 5

5

ArrayList 固有のメソッドを使用する必要がないため、「ダウン キャスト」はお勧めできません。Listあらゆることに使えるはずです。List にない ArrayList が提供する唯一の public メソッドはensureCapacity(見かけほど有用ではありません)、trimToSizeめったに有用ではありません。

コスト的には、ダウンキャストに失敗する可能性が高いかどうかによって異なります。例外をスローしない場合、通常の型チェックには 40 ナノ秒程度かかる場合があります。アップキャストは JIT によって最適化されるべきです。

于 2012-12-19T14:22:46.877 に答える
3

データベースが実際に を返さない場合ArrayList、キャストはそれを変換しません。代わりにClassCastException、実行時に が表示されます。代わりに、使用したいタイプの新しいコレクションをインスタンス化addAll(Collection c)し、データベースから返されたコレクションでそのメソッドを呼び出す必要があります。

于 2012-12-19T14:22:15.690 に答える
2

あなたがそれgetting/saving から異なるテーブルである場合databaseは、それぞれの最初の完全なマッピングを持つtableそれぞれのクラスを作成します。次に、(Insert、update、delete、select)の関数で、それぞれのテーブル クラス オブジェクトを使用してデータを渡します。そしてそのまま使う。このためには、データをテーブルに取得または保存するための別の関数を作成する必要があります。しかし、これはこのタスクを実行する最も効率的な方法です。アップキャスト/ダウンキャストの詳細については、こちらのリンクを参照してくださいtabletable

于 2012-12-20T06:35:51.597 に答える
2

で開始する場合ArrayList<Object>、これをにキャストすることはアップキャストでArrayListはありません。パラメーター化された型を生の対応する型にキャストするだけです。さらに、ArrayListのキャストも downcastArrayList<String>はありません。パラメーター化された型への未チェックのキャストです。どちらもコンパイラ アーティファクトのみであり、ランタイムに相当するものはありません

于 2012-12-19T14:28:16.750 に答える
0

パフォーマンスに関する「コスト」は実質的にゼロになります (唯一のコストは、ダウンキャストの実行時チェックにあります)。

キャストはリスト自体を変更するのではなく、参照のタイプのみを変更します。

「データベースからのデータ」はどのような形式 (データ型) で取得されますか? たとえば、JDBC ResultSet から List に変換できると期待している場合、キャストでは機能しません。実際には、ResultSet を反復処理してデータを取得する必要があります。

于 2012-12-19T14:25:04.793 に答える