You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将重复的Protobuf消息打包为com.google.protobuf.Any?

问题描述

对接一个接收com.google.protobuf.Any类型的第三方服务,需要传入repeated Message myObject对象,但不知道如何将重复的Protobuf字段打包为Any类型。

我正在编写Kotlin扩展函数,格式类似fun List<Message>.toProtobufAny(): com.google.protobuf.Any {...},希望能适配任意Message类型(因为需要发送多种重复消息类型)。最初尝试实现Any.pack(RepeatedFieldBuilder<>),但语法上一直没成功,也没找到很多针对该场景的代码示例。


补充实现示例

我定义了一个基础消息来存放Any类型的重复列表:

message RepeatedAny {
    repeated google.protobuf.Any values = 1;
}

然后创建了几个扩展函数来实现该功能:

/**
 * Given a list of protobuf messages, create a protobuf.Any
 */
fun List<Message>.toProtoAny(): Any {
    val repeatedAny = RepeatedAny.newBuilder().addAllValues(
        this.map { msg -> msg.toProtoAny() }
    ).build()

    return repeatedAny.toProtoAny()
}

/**
 * Pack a protobuf.Message into a protobuf.Any
 */
fun Message.toProtoAny(): Any = this.packAny()

/**
 * Pack a protobuf.Message into a protobuf.Any
 */
private fun Message.packAny(): Any =
    Any.pack(this, "$defaultAnyLibrary/${this.javaClass.name}")

内容的提问来源于stack exchange,提问作者romanpilot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:46:06