gpt4 book ai didi

java - 如何将通用类型作为交换输入主体而不是强制转换?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:16 26 4
gpt4 key购买 nike

Apache camel 中,可以通过将其类型传递给 exchange.getIn().getBody(Class<T> type) 来获取消息正文的自身类型.比方说我们想要将消息正文作为 String下面是示例:

String body = exchange.getIn().getBody(String.class);

如果是GenericParameterized types 消息,我们如何通过它自己的类型而不是传统的对象类型转换来获取对象。这是您实现的伪代码片段:

package com.chorke.hmis.fusion.epoint;

import java.util.ArrayList;
import java.util.HashMap;

import org.apache.camel.Exchange;
import org.springframework.stereotype.Component;

@Component("chorkeProcessor")
public class ChorkeProcessorImpl implements ChorkeProcessor{

@Override
public void process(Exchange exchange) throws Exception {
ArrayList<HashMap<String, Object>> list = null;
list = exchange.getIn().getBody(ArrayList<HashMap<String, Object>>.class);

for (HashMap<String, Object> map : list) {
for (String key : map.keySet()) {
Object value= map.get(key);
//TODO
}
}
}
}

我们的期望和例子一样。

最佳答案

根本做不到,没有ArrayList<HashMap<String, Object>>.class类,类总是一个简单的ArrayList.class ,这就是 Java 泛型类型的工作方式。您要么必须使用普通的 ArrayList :

@Component("chorkeProcessor")
public class ChorkeProcessorImpl implements ChorkeProcessor{

@Override
public void process(Exchange exchange) throws Exception {
ArrayList<HashMap<String, Object>> list = exchange.getIn().getBody(ArrayList.class);

for (HashMap<String, Object> map : list) {
for (String key : map.keySet()) {
Object value= map.get(key);
//TODO
}
}
}
}

或定义并使用您自己的类型,它只是扩展了 ArrayList<HashMap<String, Object>> :

// MyListOfMaps.java
public class MyListOfMaps extends ArrayList<HashMap<String, Object>> {
// constructors, additional methods
}

// ChorkeProcessorImpl.java
@Component("chorkeProcessor")
public class ChorkeProcessorImpl implements ChorkeProcessor{

@Override
public void process(Exchange exchange) throws Exception {
MyListOfMaps list = exchange.getIn().getBody(MyListOfMaps.class);

for (HashMap<String, Object> map : list) {
for (String key : map.keySet()) {
Object value= map.get(key);
//TODO
}
}
}
}

如果您不自己创建 map 列表,则应小心使用此方法 - 您可能需要提供适当的转换器

关于java - 如何将通用类型作为交换输入主体而不是强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188429/

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