相关疑难解决方法(0)

如何在Java中呈现可空的原始类型int?

我正在设计一个实体类,它有一个名为"documentYear"的字段,可能有无符号整数值,如1999,2006等.同时,这个字段也可能是"未知",也就是说,不确定文档是哪一年创建.

因此,C#中的可空int类型将非常适合.但是,Java没有像C#那样可以为空的特性.

我有两个选择,但我不喜欢它们:

  1. 使用java.lang.Integer而不是原始类型int;
  2. 使用-1表示"未知"值

有没有人有更好的选择或想法?

更新:我的实体类将有数万个实例; 因此,java.lang.Integer的开销可能对系统的整体性能来说太重了.

java nullable

32
推荐指数
3
解决办法
4万
查看次数

在java中创建Nullables类型

我试图在Java中创建一个nullalble对象,但不知道如何做到这一点,在C#这将是这样做的

int? someTestInt;
Run Code Online (Sandbox Code Playgroud)

这允许我检查null,而在某些情况下我可以使用0值,这不总是可能的,因为某些执行路径允许0值

java nullable

12
推荐指数
1
解决办法
1万
查看次数

编译 protobuf 以使用原始类而不是众所周知的类型

假设我有 test.proto 文件:

syntax = "proto3";

option java_package = "testing";
option java_outer_classname = "Test_v1";

import "google/protobuf/wrappers.proto";

message TestMessage {
    .google.protobuf.Int32Value integerField = 1;
}
Run Code Online (Sandbox Code Playgroud)

如果我将它编译(使用 protoc v3.5.0)到 C# 代码,我将获得可为空的类型属性:

public int? IntegerField {
   get { return integerField_; }
   set { integerField_ = value; }
 }
Run Code Online (Sandbox Code Playgroud)

但是如果我将它编译为 Java 代码,字段将是众所周知的类型:

public Builder setIntegerField(com.google.protobuf.Int32Value value) {
  if (integerFieldBuilder_ == null) {
    if (value == null) {
      throw new NullPointerException();
    }
    integerField_ = value;
    onChanged();
  } else {
    integerFieldBuilder_.setMessage(value);
 }
Run Code Online (Sandbox Code Playgroud)

我正在将项目从 proto2 移至 proto3,因此我想避免使用众所周知的类型,因为更改相关代码需要大量工作。对于 …

java protocol-buffers protoc proto3

5
推荐指数
1
解决办法
3370
查看次数

标签 统计

java ×3

nullable ×2

proto3 ×1

protoc ×1

protocol-buffers ×1