我正在尝试按房间类别(SurgeryRoom 或 TechRoom)返回已过滤的房间
列表。有没有办法通过将 room 类作为参数传递给 getAvailableRooms()
而不是使用两个私有(private)方法来实现这一点?
import java.util.*;
public class RoomBooker {
private List<IRoom> rooms = new ArrayList<>();
public RoomBooker() {
// Demo data
rooms.add(new SurgeryRoom("Surgery 1"));
rooms.add(new SurgeryRoom("Surgery 2"));
rooms.add(new TechRoom("TechRoom 1"));
rooms.add(new TechRoom("TechRoom 2"));
}
private List<IRoom> filterBySurgeryRoom() {
List<IRoom> r = new ArrayList<>();
for (IRoom room : rooms) {
if (room instanceof SurgeryRoom) {
r.add(room);
}
}
return r;
}
private List<IRoom> filterByTechRoom() {
List<IRoom> r = new ArrayList<>();
for (IRoom room : rooms) {
if (room instanceof TechRoom) {
r.add(room);
}
}
return r;
}
public List<IRoom> getAvailableRooms(String roomType, Date date) {
List<IRoom> available = new ArrayList<>();
switch (roomType.toUpperCase()) {
case "SURGERY":
available = filterBySurgeryRoom();
break;
case "TECH":
available = filterByTechRoom();
break;
}
return available;
}
}
最佳答案
传入类作为参数并使用此处记录的 isInstance
方法:https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isInstance(java.lang.Object)
private <T extends IRoom> List<T> filterRoomByType(Class<T> roomType) {
List<T> r = new ArrayList<>();
for (IRoom room : rooms) {
if (roomType.isInstance(room)) {
r.add((T) room);
}
}
return r;
}
关于java - 将类类型传递给过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47252267/