欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于工作中.net转java遇到的一个远程调用传递重复参的问题。

程序员文章站 2022-06-11 16:56:40
工作中遇到一个很奇怪的传参问题。之前.net使用的是一个List列表,列表中有几个重复的参数。列表中使用的model类是KeyValue。 我使用java模仿其写法,传递List和KeyValue。对方提示参数格式不对。我使用java中的Map封装参数。因为Map中的Key不能重复所以查询到的信息只 ......

工作中遇到一个很奇怪的传参问题。之前.net使用的是一个list列表,列表中有几个重复的参数。列表中使用的model类是keyvalue。

我使用java模仿其写法,传递list和keyvalue。对方提示参数格式不对。我使用java中的map封装参数。因为map中的key不能重复所以查询到的信息只是所需要的信息中的一条。

.net示例代码:(只是起到一个示意作用)

    public struct keyvalue<tk, tv>
    {public tk key { get; }
        public tv value { get; }
    }

参数示例:

list<keyvalue<string, string>> pams = new list<keyvalue<string, string>>();
pams.add(new keyvalue<string, string>("param1", param1));
pams.add(new keyvalue<string, string>("param2", param2));
foreach (string param3 in param3list.split(new[] { ';' })){
        pams.add(new keyvalue<string, string>("param3", param3));
}

解决方法:

使用java中的 identityhashmap 该map继承了abstractmap 实现了map接口。

最重要identityhashmap中的key比较使用等是地址比较 即使用了“==”进行比较。

示例代码:

identityhashmap<string, string> pams = new identityhashmap<>();
pams.put("param1", param1);
pams.put("param2", param2);
for(string param3: param3list.split(";")) {
    if (stringutils.isnotblank(param3)){
        pams.put(new string("param3"), param3);
     }
}