Java
 Computer >> コンピューター >  >> プログラミング >> Java

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>コピーコンストラクタを使用

どちらの方法でも要素自体はそのまま引き継がれます。用途に応じて適切な方法を選択しましょう。

  1. 【Python入門】eval()関数で文字列を評価してオブジェクトを取得する方法

    Pythonには、文字列を引数として受け取り、それをPythonの式として評価する組み込み関数 eval() が用意されています。インタプリタは渡された文字列を有効なPython式として解析し、正しければ評価を実行した結果のオブジェクトを返します。eval()関数の基本的な使い方eval() の構文は以下のとおりです。eval(expression[, globals[, locals]])第一引数には評価対象の文字列を指定します。省略可能な第二・第三引数では、評価時に使用するグローバルおよびローカルの名前空間(辞書)を指定できます。算術式を含む文字列の評価最もシンプルな例が、算術式を含む文字

  2. Pythonの辞書(dict)を文字列に変換する方法|JSONによるシリアライズと復元の基本

    辞書を文字列化するならJSONがベストPythonの辞書(dict)を文字列として保存・送信したい場合、最も推奨される形式はJSONです。標準ライブラリのjsonモジュールを使えば、追加インストール不要で簡単に相互変換が行えます。json.dumps(dict) … 辞書 → 文字列(シリアライズ)json.loads(string) … 文字列 → 辞書(デシリアライズ)基本的な使い方例えば、次のように辞書を文字列へ変換し、再び元の辞書へ戻すことができます。>>> import json>>> d = {id: 15, name: John}>>