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

时间:2015-02-10 20:34:47

标签: java logging

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

目前,我有一个受保护的Loggable接口,它有一个方法Object getLogData()。不同的基元类型有几个公共子接口。它们中的每一个都可以注册到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);
    }
});

这个街区对我来说似乎非常笨重 - 我觉得有一种更简单的方法可以做到这一点我无法想到。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

正如@BoristheSpider所建议的那样,我使用了访问者模式(当我刚开始时,这是一个外国概念)。它似乎运作得很好 - 我创建了LoggableVisitor来处理与Loggable的关系。接下来,我向logData(LoggableVisitor)接口添加了Loggable方法。代码尚未经过测试,但它已经清理了很多。再次感谢您向我介绍访客概念!