gpt4 book ai didi

java - String(或 T)和 Enum 的父类(super class)

转载 作者:行者123 更新时间:2023-12-02 06:21:14 24 4
gpt4 key购买 nike

我有一些小型日志系统,它可以处理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 的标志。

但是目前我的queueString类型,我希望它同时包含String(或者也许T 以获得更一般的答案)和 LogFlagEnum

我知道我可以使用Object作为类型,但这不是最小的可能类型,并且绝对不安全,也是我想要的。

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

最佳答案

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

解决方案2:使用CharSequence;让枚举实现 CharSequence。不太有帮助。但总的来说,CharSequence 在接受文本参数方面比 String 更好。

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

关于java - String(或 T)和 Enum 的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20996001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com