当前位置: 首页 > 面试题库 >

处理原型缓冲区中的空值

巫英纵
2023-03-14
问题内容

我正在研究从数据库获取数据并构造probbuff消息的东西。考虑到可以从数据库中为某些字段获取空值的可能性,在尝试构造probbuff消息时,我将获得Null-
pointer异常。从线程http://code.google.com/p/protobuf/issues/detail?id=57知道原型中不支持null
,我想知道是否唯一处理NPE抛出的其他方法是将手动检查插入到与原型相对应的java文件中,如下所示!

message ProtoPerson{
    optional string firstName = 1;
    optional string lastName = 2;
    optional string address1 = 3;
}

ProtoPerson.Builder builder = ProtoPerson.Builder.newBuilder();
if (p.getFirstName() != null) builder.setFirstName(p.getFirstName());
if (p.getLastName() != null) builder.setLastName(p.getLastName());
if (p.getAddress1() != null) builder.setAddress1(p.getAddress1());
...

所以有人可以澄清一下在原型构建过程中是否还有其他可能的有效方法来处理空值?


问题答案:

没有简单的解决方案。我建议只处理null检查。但是,如果您真的想摆脱它们,这里有一些想法:

  • 您可以编写一个代码生成器插件,setOrClearFoo()向每个Java类添加方法。Java代码生成器为此提供了插入点(请参见该页面的末尾)。
  • 你可以在使用Java反射迭代get*()的方法p,叫每个人,检查null,然后调用set*()的方法builder,如果非空。这将具有额外的优势,即您不必在每次添加新字段时都更新复制代码,但是这比编写显式复制每个字段的代码要慢得多。


 类似资料:
  • 环型缓冲区是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。 构造环型缓冲区 var ringBuffer = new RingBufferStream(); 函数原型 RingBufferStream(int capacity = 8192, bool exposable = true); 参数 描述 capacity 环状缓冲区的最大容量,为2的次方。如:传入12,则

  • mimeType String - 要发送的缓冲区的mimeType data Buffer - 实际的Buffer内容

  • 本文向大家介绍vim 管理缓冲区,包括了vim 管理缓冲区的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用缓冲区来处理多个文件。当您使用打开文件时 它会在一个新的缓冲区中打开(该命令意味着编辑文件)。保存文件临时副本的新缓冲区。 您可以使用转到上一个缓冲区,使用进入:bp[rev]下一个缓冲区:bn[ext]。 您可以转到b{n}第n个缓冲区。b2转到第二个缓冲区。 使用:ls或:buf

  • 本文向大家介绍8085微处理器中的地址/数据缓冲区,包括了8085微处理器中的地址/数据缓冲区的使用技巧和注意事项,需要的朋友参考一下 地址和数据缓冲区用于双向数据传输。当他们发送地址的最低有效字节时,它们执行单向数据传输。这些缓冲器仅用于增加电流的驱动能力。通过内部总线,数据进入缓冲区。地址的最低有效字节从内部地址锁存器到另一个缓冲区。 因此,地址或数据在从AD 7 到AD0的地址上发送出去,可

  • 在循环队列的数组实现中,如果在第一个元素之前指向一个插槽,而在最后一个元素之后指向一个插槽,则会面临如何识别队列是满还是空的问题。 为了解决这个问题,我们要么使用计数器,要么在缓冲区中浪费一个空间。 我在想下面的方法。请纠正我的错误,如果没有请让我知道这是一个更好/更差的解决方案比以上。 null

  • 我在张量流中使用keras创建了一个自定义模型。我使用的版本是tensorflow nightly 1.13.1。我使用官方工具构建了tensorfflow lite模型(方法tf.lite.TFLiteConverter.from_keras_model_file)。 创建模型后,我查看了输入形状,似乎没有什么不好。 tensorflow lite模型中的输入和输出形状为: 您可以注意到输入形状