JavaでArrayList<String>とArrayList<Object>を相互に変換する方法
Javaのジェネリクスでは、ArrayList<String>とArrayList<Object>は互換性がないため、直接代入やキャストを行うとコンパイルエラーになります。しかし、ワイルドカード(?)やコンストラクタを活用することで、両者を相互に変換できます。この記事では、2つの変換方法をサンプルコード付きで解説します。
ワイルドカードとは
ジェネリクスの型パラメータ(T)の代わりに「?」を使用すると、「不明な型」を表すことができます。これをワイルドカードと呼びます。ワイルドカードは、以下の場所で使用できます。
- メソッドのパラメータの型
- フィールドの型
- ローカル変数の型
このワイルドカードを利用すると、ArrayList<Object>をArrayList<String>へキャストして変換することが可能です。
ArrayList<Object>からArrayList<String>への変換
ArrayList<Object>をArrayList<String>に変換するには、一度ArrayList<?>にキャストしてから、目的の型にキャストします。
ArrayList<String> stringList = (ArrayList<String>)(ArrayList<?>)(list);
サンプルコード
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListExample {
public static void main(String args[]) {
// ArrayListオブジェクトのインスタンス化
ArrayList<Object> list = new ArrayList<Object>();
// リストに要素を追加
list.add("apples");
list.add("mangoes");
list.add("oranges");
// Object型のArrayListをString型に変換
ArrayList<String> stringList = (ArrayList<String>)(ArrayList<?>)(list);
// 変換後のリストの内容を表示
Iterator<String> it = stringList.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
実行結果
apples mangoes oranges
注意: この方法は未検査キャストの警告が出る場合があります。元のリストに文字列以外の要素が含まれていると、実行時にClassCastExceptionが発生する可能性があるため、リストの中身が確実に文字列である場合のみ使用してください。
ArrayList<String>からArrayList<Object>への変換
ArrayList<String>をArrayList<Object>に変換するには、以下の手順で行います。
- String型のArrayListオブジェクトを作成(または取得)します。
- そのオブジェクトを引数としてコンストラクタに渡し、新しいObject型のArrayListを作成します。
ArrayListのコピーコンストラクタは別の型パラメータを持つコレクションも受け取れるため、安全かつ簡単に変換できます。
サンプルコード
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListExample {
public static void main(String args[]) {
// ArrayListオブジェクトのインスタンス化
ArrayList<String> stringList = new ArrayList<String>();
// リストに要素を追加
stringList.add("apples");
stringList.add("mangoes");
stringList.add("oranges");
// String型のArrayListをObject型に変換
ArrayList<Object> objectList = new ArrayList<Object>(stringList);
// 元のリストの内容を表示
Iterator<String> it = stringList.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
実行結果
apples mangoes oranges
まとめ
| 変換方向 | 方法 |
|---|---|
| ArrayList<Object> → ArrayList<String> | ワイルドカード(?)を経由したキャスト |
| ArrayList<String> → ArrayList<Object> | コピーコンストラクタを使用 |
どちらの方法でも要素自体はそのまま引き継がれます。用途に応じて適切な方法を選択しましょう。
-
【Python入門】eval()関数で文字列を評価してオブジェクトを取得する方法
Pythonには、文字列を引数として受け取り、それをPythonの式として評価する組み込み関数 eval() が用意されています。インタプリタは渡された文字列を有効なPython式として解析し、正しければ評価を実行した結果のオブジェクトを返します。eval()関数の基本的な使い方eval() の構文は以下のとおりです。eval(expression[, globals[, locals]])第一引数には評価対象の文字列を指定します。省略可能な第二・第三引数では、評価時に使用するグローバルおよびローカルの名前空間(辞書)を指定できます。算術式を含む文字列の評価最もシンプルな例が、算術式を含む文字
-
Pythonの辞書(dict)を文字列に変換する方法|JSONによるシリアライズと復元の基本
辞書を文字列化するならJSONがベストPythonの辞書(dict)を文字列として保存・送信したい場合、最も推奨される形式はJSONです。標準ライブラリのjsonモジュールを使えば、追加インストール不要で簡単に相互変換が行えます。json.dumps(dict) … 辞書 → 文字列(シリアライズ)json.loads(string) … 文字列 → 辞書(デシリアライズ)基本的な使い方例えば、次のように辞書を文字列へ変換し、再び元の辞書へ戻すことができます。>>> import json>>> d = {id: 15, name: John}>>