2014-09-05 5 views
1

Я пытаюсь получить значения из общего списка типов объектов. И я хочу поставить некоторое условие на значение одного атрибута этого класса. Например, у меня есть класс компонент UserИтерация через общий список Тип объекта

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

Я хранимый три записи этого в таблице. как (FIRST_NAME, LAST_NAME, COMPANY_NAME) (Джон Вудс, Persistent) (Билл Гейтс, Microsoft) (Стив Джобс, Apple)

И когда я получаю эти записи из таблицы, это в списке, как это

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

Теперь я хочу проверить, имеет ли какой-либо пользователь lastName = Jobs, затем измените значение Компании на Google.

Кто-нибудь, пожалуйста, скажите мне, как мне это сделать.

+0

Как T определяется на уровне метода или уровне класса? если нет, то почему вы не можете напрямую назначить его «List '? – sidgate

+0

Я не назначил его как Пользователь, потому что иногда он может быть другого класса. Метод, в котором я получаю список записей, является общим, что означает, что этот метод делает то же самое и для другой таблицы (или вы можете сказать класс). Поэтому иногда T может быть и другим классом. но всякий раз, когда этот метод вызывается с T как Пользователь, он должен работать согласно требованию. –

ответ

3

В общем случае вы можете сделать это:

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

Список list = query.getResultList(); Метод, в котором этот код является общим методом. Означает, что этот метод делает то же самое для некоторых других таблиц (или мы можем сказать, класс). По этой причине я сохранил его как общий. –

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

И вы будете нуждаться в сеттеров и добытчиками, так как эти поля являются частными.

+0

Тип T не имеет метода .getLastName() – FrobberOfBits

+0

Вот почему я сказал, что ему нужны сеттеры и геттеры. lastName и компания являются частными – RockOnRockOut

+0

Здесь подразумеваются геттеры и сеттеры. Если у меня есть частное поле с именем foo и комментарий, который говорит // getters и seters, то я думаю, что это нормально, чтобы предположить существование метода .getFoo(). Но вы можете только предположить, что по моему типу. Не для общего типа T – FrobberOfBits

0

Вы не можете сделать общий метод делать разные вещи в зависимости от типа T.

В List<T>, нет никаких ограничений на то, что тип T может быть, поэтому все, что известно, что это предмет какой-то и вы можете вызывать только методы, которые работают на любом объекте (т.е. методы, определенные в Object класс). В принципе, переменная типа T фактически является переменной типа Object во время выполнения.

Вы можете использовать instanceof и бросает, чтобы проверить, является ли объект определенного типа:

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

Но это на самом деле не связано с дженериков; вы не смотрите на тип T, просто тип каждого отдельного объекта в списке.

Смежные вопросы