Mat*_*hew 2 java interface list
假设我有一个名为MemberNio的类(包含一个SocketChannel和其他特定于nio的对象),它扩展了Member类.
方法getMember(id)和getMembers返回MemberNio对象.我的应用程序层不需要知道任何有关Nio的东西,只需调用getMember方法来获取成员并使用超类型成员:
Member member = membersMgr.getMember(id);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用getMembers时会出现问题:
List<Member> members = membersMgr.getMembers(); // <- error, can't cast List<MemberNio> to List<Member>
Run Code Online (Sandbox Code Playgroud)
那将迫使我拥有MemberNio对象,我应该只知道Member对象.
当我使用Lists和Interfaces/suptypes时,这是一个反复出现的问题.
您可以使用: -
List<? extends Member> members = membersMgr.getMembers();
for (Member member: members) {
if (member instanceof MemberNio) {
MemberNio memNio = (MemberNio)member;
/** Do your stuff **/
}
}
Run Code Online (Sandbox Code Playgroud)
为了获取members使用enhanced-for loop,我们使用了以下概念: - Super type Reference pointing the Subclass object.所以,无论subclass存储在哪个对象中list,我们总是使用super-class引用指向它们.然后TypeCast通过检查实际的相应instance type...
并使返回类型getMembers()相同..它会工作.
这样,你可以返回List的Member或任何类,extends your Member类..而且你也不需要给这些类的名称明确..