的超類我有一些小的記錄系統,它可處理String
s,這是所有工作的罰款。
現在,我想補充的信號,我希望有一個新的生產線的能力,而且由於我的結構,我認爲這是最好使用一個特殊的標誌,一些示例代碼:字符串(或T)和枚舉
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
)和LogFlagEnum
。
我知道我可以使用Object
類型,但不是最小的可能類型和definatey也不安全,我想什麼。
什麼是執行規定的行爲的最好辦法?
唯一共同的超類的字符串和枚舉的是java.lang.Object中。你真的想混合類型嗎?如果是這樣,那麼你應該再次考慮泛型的設計和使用。 –
有一個'Message'隊列並使用'toString'方法進行記錄。或者添加一個文字新行 - 「System.lineSeparator()' - 到隊列中。 –
@MenoHochschild我認爲/希望可以通過使用'Class'來完成,其中'T'是* some *的定義。 –
skiwi