Java泛型问题

时间:2010-07-22 06:49:30

标签: java generics

我有以下用户列表。 StudentBean和ProfessorBean是UsersBean的子类型。

List<? extends UsersBean> users = this.getUsers(locationId);
for(UsersBean vo :users) { System.out.println("Name : "); }

这里我想打印professorbean的信息或StudentBeans的信息。有没有办法在没有明确演员的情况下获得教授或学生bean方法?

4 个答案:

答案 0 :(得分:2)

如果该方法很常见并且在基类或接口(UsersBean)中声明,则为是。否则 - 不,你需要施放。没有鸭子用Java打字。

答案 1 :(得分:2)

您需要在UserBean类/接口中声明要访问的方法。例如,如果UserBean是您将拥有的接口:

public interface UserBean {
    public String getInfo();
}

class StudentBean implements UserBean {
    public String getInfo() {
        return "student info";
    }
}

class ProfessorBean implements UserBean {
    public String getInfo() {
        return "professor info";
    }
}

答案 2 :(得分:0)

听起来我觉得这是一种糟糕的设计气味。

您有对用户的引用,那么您可能会“处理”用户。

并且,它与“泛型”无关

答案 3 :(得分:0)

不,那是不可能的。如果您的集合需要访问bean方法,则需要将UserBean对象强制转换为StudentBean或ProfessorBean。

可以在UserInfo bean中将公共方法声明为抽象getter / setter,以避免强制转换。

替代方法可能是重载getUser方法以允许这样过滤:

List<ProfessorBean> professors = this.getUser(locationId, ProfessorBean.class);

该方法只会返回作为教授的用户(在此示例中)。它仍然需要强制转换,但是铸造将在getUser方法中“隐藏”。