我有一些小型日志系统,它可以处理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
作为类型,但这不是最小的类型,并且定义不安全和我想要的。
实现指定行为的最佳方法是什么?
答案 0 :(得分:2)
解决方案1:使用Object。这没什么大不了的,因为它只是内部实施。
解决方案2:使用CharSequence;有枚举实现CharSequence。不是很有帮助。但一般来说,CharSequence比String更接受文本参数。
解决方案3:通过引入新类型可以解决Java中的每个问题。队列可以是LogEntry
的队列,LogEntry
可以包含String / enum / whatever。