gpt4 book ai didi

java - 处理Java对象

转载 作者:行者123 更新时间:2023-11-30 06:08:14 25 4
gpt4 key购买 nike

我想使用此 Java 代码来处理来自 RabbitMQ 发布者的序列化 Java 对象。

            Consumer consumerone = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
processobjone(body);
}
};
channel.basicConsume(QUEUE_FIRST_NAME, true, consumerone);

Consumer consumersec = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
processobjsec(body);
}
};
channel.basicConsume(QUEUE_SEC_NAME, true, consumersec);

// Processing

private void processobjone(byte[] body) {
// handle obj
}

private void processobjsec(byte[] body) {
// handle obj
}

.... and many more

问题是我将拥有超过 50 种类型的 Java 对象。是否有任何设计模式或智能 Java 方法可以对所有方法使用一个工厂方法并重用代码?我只想用一些聪明的方法将 Java 代码缩小为几行。正如您所看到的,有 50 种处理交付的方法看起来不太好。

最佳答案

每个方法都是一个 Consumer<byte[]> ,并且需要将它们分配给某个队列名称。这可能最好在 Map 中完成。 .

import java.util.function.Consumer;

// ...

Map<String, Consumer<byte[]>> queueToConsumer = new HashMap<>();
queueToConsumer.put(QUEUE_NAME_ONE, this::processobjone);
queueToConsumer.put(QUEUE_NAME_TWO, this::processobjtwo);
// and so on

然后您可以使用它来创建 Consumer s。

queueToConsumer.forEach((queueName, consumer) -> {
channel.basicConsume(queueName, true, new DefaultConsumer() {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
consumer.accept(body);
}
});
});

如果您的名字与Consumer有冲突因为com.rabbitmq.client.Consumer ,您可以使用将 map 声明为 Map<String, java.util.function.Consumer<byte[]>>相反。

关于java - 处理Java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50830799/

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