字符串(或T)和枚举的超类

时间:2014-01-08 12:43:24

标签: java enums

我有一些小型日志系统,它可以处理String,这一切都正常 现在我想添加能够发出我想要一个新行的信号,并且由于我的结构,我认为最好使用一个特殊的标志,一些示例代码:

public class BaseLogger implements Runnable, LogConsumer {
    //....
    private final BlockingQueue<String> queue;
    //....

    @Override
    public void run() {
        while (running) {
            try {
                if (consumers.isEmpty()) {
                    synchronized(consumersEmptyLock) {
                        consumersEmptyLock.wait();
                    }
                }
                String message = queue.take();
                for (LogConsumer consumer : consumers) {
                    consumer.consume(message);
                }
            } catch (InterruptedException ex) {
                handleInterrupt();
            }
            if (requestShutdown && queue.isEmpty()) {
                running = false;
            }
        }
    }

    public void log(String message) {
        if (message == null) {
            throw new IllegalArgumentException("customlogger.CustomLogger.log: message == null");
        }
        queue.offer(message);
    }

所以现在我想添加一个枚举,让我们说LogFlagEnum,其中包含一个名为NEW_LINE的标记。

但目前我的queue类型为String,我希望它包括String(或者T以获得更一般的答案)和{{ 1}}。

我知道我可以使用LogFlagEnum作为类型,但这不是最小的类型,并且定义不安全和我想要的。

实现指定行为的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

解决方案1:使用Object。这没什么大不了的,因为它只是内部实施。

解决方案2:使用CharSequence;有枚举实现CharSequence。不是很有帮助。但一般来说,CharSequence比String更接受文本参数。

解决方案3:通过引入新类型可以解决Java中的每个问题。队列可以是LogEntry的队列,LogEntry可以包含String / enum / whatever。