Java Protobuff如何动态地获取字段选项,并在键和值为字符串的映射中强制转换它们

Java Protobuff如何动态地获取字段选项,并在键和值为字符串的映射中强制转换它们,java,scala,protocol-buffers,proto,Java,Scala,Protocol Buffers,Proto,我正在使用Proto 3并使用以下选项: syntax = "proto3"; package com.message.user; import "google/protobuf/timestamp.proto"; import "message/address.proto"; option java_multiple_files = true; message Users { int32 id = 2; strin

我正在使用Proto 3并使用以下选项:

syntax = "proto3";

package com.message.user;

import "google/protobuf/timestamp.proto";
import "message/address.proto";

option java_multiple_files = true;


message Users {

  int32 id = 2;
  string first_name = 4;
  string last_name = 5;
  string work_city = 8;
  string work_state = 9;


  Address address = 24 [
    (com.castlight.apollo.proto.message.address).city = "$.work_city",
    (com.castlight.apollo.proto.message.address).state = "$.work_state"
  ];

  
}

如上所述,我使用字段选项作为地址

 Address address = 24 [
    (com.castlight.apollo.proto.message.address).city = "$.work_city",
    (com.castlight.apollo.proto.message.address).state = "$.work_state"
  ];
现在在我的scala代码中,我想动态地获取字段选项

我的scala代码:

val fieldOptionDescriptor: FieldDescriptor = CustomOptionsProto.getDescriptor.findExtensionByName(field.getMessageType.getName.toLowerCase)

val fieldValues = field.getOptions.getField(fieldOptionDescriptor)
我的问题是,现在如何对字段值进行装箱,以便获得字段地图

因此,预期地图应为:

 (city -> $.work_city),
 (state -> $.state) 
现在我正在使用toString函数获取
fieldValues
的字符串值,然后将字符串转换为映射。但是玩toString可能会很棘手,所以在不使用toString的情况下寻找帮助来获取地图

注意:我不想给出地址的引用,因为会有更多类似于地址的Proto,并且对于每个新Proto,我不想添加代码