关于工作中.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); } }