2016-06-22 5 views
0

아래 상황을 고려하십시오. 빈 목록을 찾는 방법은 어떤 객체 유형을 취합니다.빈 목록에서 개체 유형 찾기

List<User> userList = new ArrayList(); 
List<Address> addList = new ArrayList(); 
method1(userList); 
method1(addList); 
void method1(List<?> list){ 
//Now list is empty; 
//how to find list accepts User type object or Address type object 
    } 
+2

당신은 할 수 - 참조 [타입 삭제] (http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens). –

+0

다음과 같이 타입을 넘길 수 있습니다 :''' void method1 (리스트 리스트, 클래스 cls) {...}''' –

+0

자신 만의리스트를 생성하지 않으면 볼 수 없습니다 유형에 대한 정보. 이미 대답은 [여기]입니다 (http://stackoverflow.com/questions/10108122/how-to-instanceof-listmytype) – SomeDude

답변

1

불가능합니다. Java는 컴파일 후에 유형을 지 웁니다.

그러나이 같은 수행 할 수 있습니다

<T> void method1(List<T> list, Class<T> tclass){ 
    // you force the class T as argument 
} 

"방법 항목"에 호출은 조금 다르다.

List<User> userList = new ArrayList(); 
method1(userList, User.class); 
0

와일드 카드가있는 경우 빈 목록에서 개체 유형을 가져올 수 없습니다. 빈 목록을 전달하고 목록에 액세스하려고하면 NullPointerException이 발생합니다. 빈 목록을 전달하고 목록을 사용하지 않으면 목록이 실행됩니다. 와일드 카드는 알 수없는 유형으로 사용됩니다. 와일드 카드로 목록을 사용하는 경우 유형은 포함 된 객체에 따라 결정됩니다. list가 비어 있으면 해당 객체 유형에 대한 정보를 가질 수 없음을 의미합니다. 다음은 요소를 포함하는 목록을 전달하는 예제이며 해당 요소가 속한 목록의 개체 유형을 가져올 수 있습니다. 이와 같이 오브젝트 유형을 얻을 수 있습니다. 그럴 수 없다면 당신을 도와 줄 유스 케이스를 설명하십시오. 감사.

public class GenericsTest 
{ 
     List<User> userList = new ArrayList(); 
     User aa1 = new User(20, "Mine"); 
     User aa2 = new User(10, "Yours"); 
     userList.add(aa1); 
     userList.add(aa2); 
     List<Address> addList = new ArrayList(); 
     Address bb1 = new Address("20", "A B Road", "Kolkata"); 
     Address bb2 = new Address("10", "B C Roy Road", "KOlkata"); 

     addList.add(bb1); 
     addList.add(bb2); 

     method1(userList); 
     method1(addList); 
     method2(userList); 
     method2(addList); 
     public static void method1(List<?> list) 
     { 
      if(list.get(0) instanceof User) 
      { 
       System.out.println("I am User"); 
      } 
      if(list.get(0) instanceof Address) 
      { 
       System.out.println("I am Address"); 
      } 
     } 
     public static void method2(List<?> list) 
     { 
      System.out.println("If you are not using list and have your own custom logic to find the type"); 
     } 
} 
class User 
{ 

    int a1; 
    String b1; 
    public User(int a1, String b1) { 

     this.a1 = a1; 
     this.b1 = b1; 
    } 

} 
class Address 
{ 
    String line1; 
    String line2; 
    String line3; 

    public Address(String line1, String line2, String line3) 
    { 

     this.line1 = line1; 
     this.line2 = line2; 
     this.line3 = line3; 
    } 
} 
+0

'public static void method1 (리스트 리스트) { // 새로운 것을 추가하고 싶습니다. userList의 경우 사용자 객체가 왔고 다른 메소드로 목록을 전달합니다. method2 (list); }'가능하거나 다른 방법이 있습니다. – gauti

+0

예, 목록에 와일드 카드가있는 개체를 목록에 추가 할 수 있습니다. 그런 다음 다른 방법으로 목록을 제공 할 수 있습니다. 목록을 사용하는 다른 방법은 목록에 포함 된 개체를 기반으로 목록을 처리 할 수 ​​있어야합니다. – RCS