java - 将类类型传递给过滤函数

标签 java

我正在尝试按房间类别(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/

相关文章:

java - 更改 URL 中列表/数组的格式 [Retrofit 2]

java - 在 Java 中使用 BouncyCaSTLe 以 block 的形式读取 AES/GCM 编码数据

java - GridBagLayOut 向上跨越列?

java - 如何从另一个泛型类参数转换泛型参数?

java - 为什么在文件服务器程序套接字中写入 "Socket s =null"?

java - 在选项卡 View 之间滑动几次后膨胀异常

java - 从方法引用中捕获异常

java - 如何判断 MediaPlayer 是否正在播放?

java - Android解析对象KSOAP

java - 用随机数创建一个数组