将任何原始数字的原始字节记录到文件中

Log raw bytes of any primitive number to a file

我正在为我的机器人团队开发轻量级 data/metrics 记录器。我需要能够在任何给定时间点从传感器或开关中检索数据,并且我想让它们成为我想要的任何原始数字。

目前,我有一个受保护的 Loggable 接口,它只有一个方法 Object getLogData()。有几个 public 子接口用于不同的原始类型。它们中的每一个都可以注册到 Logger(添加到 List<Loggable>)以访问来自 运行 的数据。

这是用于记录来自 Loggable 类:

的数据的当前未经测试的代码
loggables.forEach((loggable) -> {
    if (loggable instanceof ByteLoggable) {
        writer.write((Byte) loggable.getLogData());
    } else if (loggable instanceof ShortLoggable) {
        writer.writeShort((Short) loggable.getLogData());
    } else if (loggable instanceof IntLoggable) {
        writer.writeInt((Integer) loggable.getLogData());
    } else if (loggable instanceof LongLoggable) {
        writer.writeLong((Long) loggable.getLogData());
    } else if (loggable instanceof FloatLoggable) {
        writer.writeFloat((Float) loggable.getLogData());
    } else if (loggable instanceof DoubleLoggable) {
        writer.writeDouble((Double) loggable.getLogData());
    } else {
        throw new IllegalArgumentException("Unknown loggable type: " + loggable);
    }
});

这个块对我来说似乎很笨重 - 我觉得有一种我想不到的更简单的方法来做到这一点。有人有什么想法吗?

根据@BoristheSpider 的建议,我使用了访客模式(刚开始时这对我来说是一个陌生的概念)。看起来效果很好——我创建了一个 LoggableVisitor 来处理与 Loggable 的关系。接下来,我在 Loggable 接口中添加了一个 logData(LoggableVisitor) 方法。该代码尚未经过测试,但已经清理了很多。再次感谢您向我介绍访客概念!