我有以下用户列表。 StudentBean和ProfessorBean是UsersBean的子类型。
List<? extends UsersBean> users = this.getUsers(locationId);
for(UsersBean vo :users) { System.out.println("Name : "); }
这里我想打印professorbean的信息或StudentBeans的信息。有没有办法在没有明确演员的情况下获得教授或学生bean方法?
答案 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方法中“隐藏”。