迭代通用的对象类型列表

时间:2014-09-05 13:23:06

标签: java list generics arraylist

我正在尝试从对象类型泛型List中获取值。我想在该类的一个属性的值上加上一些条件。 例如,我有Bean类User

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

我在表格中存储了三条记录。喜欢  (FIRST_NAME,LAST_NAME,COMPANY_NAME)  (John,Woods,Persistent)(比尔,盖茨,微软)(史蒂夫,乔布斯,苹果)

当我从表中获取这些记录时,它就像这样的列表

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

现在我想检查是否有任何用户拥有lastName = Jobs然后将公司的值更改为Google。

有人请告诉我该怎么做。

3 个答案:

答案 0 :(得分:4)

在一般情况下,您可以这样做:

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

答案 1 :(得分:0)

根据T的类型,您无法使通用方法执行不同的操作。

List<T>中,对T的类型没有限制,因此它所知道的是它是某种类型的对象,你可以只调用适用于任何对象的方法(即Object类中定义的方法)。基本上,T类型的变量实际上是运行时类型Object的变量。

您可以使用instanceof和强制转换来检查对象是否属于特定类型:

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

但这与仿制药并不相关;你不是在查看T的类型,只是列表中每个单独对象的类型。

答案 2 :(得分:-2)

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

你需要制定者和吸气者,因为这些字段是私人的。