2014-09-05 2 views
1

개체 유형 generic 목록에서 값을 가져 오려고합니다. 그리고 그 클래스의 한 속성의 가치에 어떤 조건을 넣고 싶습니다. 예를 들어 나는 테이블이 세 가지 기록을 저장 한일반 목록 반복 객체 유형 목록

class User { 
    private String firstName; 
    private String lastName; 
    private String companyName; 
    //Getters and Setters 
} 

Bean 클래스 사용자가 있습니다. 같은 (FIRST_NAME, LAST_NAME, COMPANY_NAME) (존 우즈, 영구) (빌 게이츠, 마이크로 소프트) (스티브 잡스, 애플)

을 내가 테이블에서 이러한 레코드를 얻고 때이 같은 목록입니다

List<T> list = query.getResultList(); 

사용자가 lastName = Jobs를 보유하고 있는지 확인한 다음 회사 값을 Google로 변경하고 싶습니다.

누군가 내가 어떻게해야하는지 알려주세요.

for(T item : list) { 
    if(item instanceof User && "Jobs".equals(((User)item).getLastName())) { 
     // Change company to google. 
    } 
} 
+0

T는 메서드 수준 또는 클래스 수준에서 어떻게 정의됩니까? 만약 당신이 왜 그것을'List '에 직접 할당 할 수 없습니까? – sidgate

+0

나는 다른 클래스 일 수 있기 때문에 사용자로 지정하지 않았습니다. 나는 레코드의리스트를 얻는 메소드가 일반적이다. 이것은이 메소드가 다른 테이블에 대해서도 같은 일을한다는 것을 의미한다 (또는 클래스를 말할 수있다). 때로는 T도 다른 클래스가 될 수 있습니다. 그러나 그 메소드가 T로 호출 될 때마다 그것은 요구 사항에 따라 작동해야합니다. –

답변

3

일반적인 경우에 당신은이 작업을 수행 할 수 있습니다.

+0

리스트 list = query.getResultList(); 이 코드가 Generic 메서드 인 메서드입니다. 그 메소드가 다른 테이블 (또는 클래스를 말할 수있는)에 대해서도 똑같은 것을 의미합니다. 그런 이유로 나는 그것을 일반으로 유지했다. –

-2
for(T element : list){ 
    if((element instanceof User) && (element.getLastName().equals("Jobs"))) 
     element.setCompany("Google"); 
} 

을 그리고 그 분야는 개인이기 때문에 당신은 세터와 게터가 필요합니다

+0

타입 T에는 .getLastName() 메소드가 없습니다. – FrobberOfBits

+0

그래서 내가 setter와 getter가 필요하다고 말했죠. lastName과 company는 private 임 – RockOnRockOut

+0

getters와 setters는 여기에 암시되어 있습니다. foo라는 개인 필드와 // getters 및 setters라는 주석이있는 경우 .getFoo() 메서드가 있다고 가정하는 것이 좋습니다. 하지만 당신은 내 타입에 대해서만 그것을 추측 할 수 있습니다. 제네릭 타입 T – FrobberOfBits

0

일반 메서드를 T 유형에 따라 다른 작업을 수행 할 수 없습니다.

List<T>에서, 그래서 모두가 알려진 것으로는 어떤 종류의 객체가 있다고이며, 당신은 단지 Object에 정의 된 모든 오브젝트 작업 방법 (즉, 메소드를 호출 할 수 T 될 수있는 종류에는 제한이 없습니다 수업). 기본적으로 T 유형의 변수는 런타임에 Object 유형의 변수입니다.

당신은 instanceof을 사용하고 개체가 특정 유형인지 여부를 확인하기 위해 캐스트 할 수

:

for (T item : list) { 
    if (item instanceof User) { 
     User user = (User) item; 
     // ... 
    } 
} 

하지만이 정말 제네릭 관련이 없습니다; T 유형을보고 있지 않습니다. 목록에있는 각 개체의 유형입니다.