怎样友好的兼容 java 中的集合类
alpha-baby opened this issue · 4 comments
What would you like to be added:
Why is this needed:
在 java 中把这个结构序列化出来:
Object[] as = new Object[1];
List l = new LinkedList();
l.add("123");
l.add("456");
as[0] = l;
java:
00000000 71 07 5b 6f 62 6a 65 63 74 72 14 6a 61 76 61 2e |q.[objectr.java.|
00000010 75 74 69 6c 2e 4c 69 6e 6b 65 64 4c 69 73 74 03 |util.LinkedList.|
00000020 31 32 33 03 34 35 36 |123.456|
golang 这个接口序列化出来是:
encoder.Encode([]interface{}{[]string{"123", "123"}})
golang:
00000000 58 91 56 07 5b 73 74 72 69 6e 67 92 03 31 32 33 |X.V.[string..123|
00000010 03 31 32 33 |.123|
java 把 Object[] 序列化,为了TypedList, 但是 golang 把 interface{} 切片序列化为了 UntypedList 这个又是为什么呢?
java 把 Object[] 序列化,为了TypedList, 但是 golang 把 interface{} 切片序列化为了 UntypedList 这个又是为什么呢?
@alpha-baby 你的意思是 java中 如果 Object[] 中只有一个元素,就会序列化为 TypedList, 如果有2个不同的元素就会序列化为 UntypedList 吗? 如果真是这样,就变得不可预期,是不是一种不可取的方式?
java 把 Object[] 序列化,为了TypedList, 但是 golang 把 interface{} 切片序列化为了 UntypedList 这个又是为什么呢?
@alpha-baby 你的意思是 java中 如果 Object[] 中只有一个元素,就会序列化为 TypedList, 如果有2个不同的元素就会序列化为 UntypedList 吗? 如果真是这样,就变得不可预期,是不是一种不可取的方式?
不管有几个元素都会序列化成 TypedList, 这里和元素个数没得关系,
@alpha-baby 跨语言访问最好还是不要使用特定语言中才有的类定义,如果要兼容,需要在go中特殊定义,参考 https://github.com/apache/dubbo-go-hessian2/blob/master/java_util/README_CN.md
https://github.com/apache/dubbo-go-hessian2/blob/master/java_util/README_CN.md
确实是这样,我这里的情况是,对方定义的那个 java 接口已经很多年了,方法入参中已经定义成了 List