ArrayList<String>을 ArrayList<Object>로 변환하기
제네릭의 타입 매개변수(T) 대신 알 수 없는 타입을 의미하는 물음표(?)를 사용할 수 있습니다. 이것을 '와일드카드(wildcard)'라고 하며, 메서드 매개변수의 타입, 필드, 지역 변수 등에 활용할 수 있습니다. 와일드카드를 이용하면 ArrayList<String>을 다음과 같이 변환할 수 있습니다.
ArrayList<String> stringList = (ArrayList<String>)(ArrayList<?>)(list);
다만 이 방식은 unchecked cast 경고가 발생할 수 있으며, 리스트에 문자열이 아닌 요소가 포함되어 있다면 런타임에 ClassCastException이 발생할 수 있으므로 주의해서 사용해야 합니다.
예제
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
ArrayList<Object>를 ArrayList<String>으로 변환하기
반대로 ArrayList<String>을 ArrayList<Object>로 변환하는 것은 훨씬 간단합니다. 다음 두 단계만 거치면 됩니다.
String 타입의 ArrayList 객체를 생성하거나 이미 존재하는 객체를 준비합니다.
해당 객체를 생성자의 인자로 전달하여 Object 타입의 새로운 ArrayList 객체를 생성합니다.
예제
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListExample {
public static void main(String args[]) {
// String 타입의 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