차근차근/JAVA JSP

제네릭 형변환 질문..

예쁜꽃이피었으면 2014. 10. 29. 12:55

http://okjsp.net/seq/170034#1414547013524


초보질문인지 모르겠습니다만.. 


List<Car> carList = new List<Car>(); 


List<Object> objList = (List<Object>) carList; 



캐스팅부분에서 List<Car> 를 List<Object>로 

형변환 해줄수 없다는 에러가 납니다. 


List<Car> 를 List<Object>로 캐스팅할려면 어떻게 해줘야 하는지요..






출처 : http://bryant.tistory.com/25 

1. Type Safety 

2. Generic은 형변환이 되지않는다. (상속을 인정하지 않는다.) 

3. 타입 삭제. 

4. wildcard types 

1) 모든 타입을 받지만 제한을 둔다. 

- <? extends Number> : Number형 이하를 받는다. 

- <? super Numbr> : Number형 이상을 받는다. 

5. Generic Methods : 리턴 타입 앞에 generic형을 쓴다. 

1) 만능형 메소드를 사용하기위해 선언한다.






objList.add((Object)carList.get(i))가 답이겠죠. 


애초에 generic type라는게 무의식적으로 되는 자동형변환을 명시적으로 지정해두어 막는 용도이니까요. 명시적으로 형변환을 해서 넣으시면 됩니다.







List<Car> a = new ArrayList<Car>(); 

List<? extends Object> b = a; 

List<Object> c = (List<Object>) b; 

이런 과정을 거치면 일단 컴파일 오류는 나지 않는듯.. 하지만 실행은 안해봤음.. ^^ 

아.. 그리고 . List는 interface이기 때문에 new로 객체를 생성할 수 없습니다. 

List의 구현체중 하나(ArrayList, LinkedList 등... )를 사용하셔야... 








흠.. 글쿤요 


import java.util.ArrayList; 

import java.util.List; 


import org.junit.Test; 



public class A 

@Test 

public void testB() throws Exception 

List<B> list = new ArrayList<A.B>(); 


for (int i = 0; i <= 10; i++) 

B b = new B(); 

b.setB(""+i); 


list.add(b); 


System.out.println(list); 



List<? extends Object> b = list; 

List<Object> c = (List<Object>) b; 


System.out.println(b + "\t" + b.size()); 

System.out.println(c + "\t" + c.size()); 

}


static class B 

String b; 


public void setB(String b) { 

this.b = b; 


public String getB() { 

return b; 


@Override 

public String toString() 

return b; 

반응형