NULL_BOOLEAN is not compatible with Value Objects
还没有人认领这个 Issue。
评估
调研方向
从 google-http-client/src/main/java/com/google/api/client/util/Data.java 开始,特别关注 Data.isNull 和 NULL_BOOLEAN,并使用 JDK 28 的 value-class 预览功能重现 issue 中所示的 Assertions。比较两种提议的方法;完成的标准是,合法的 Boolean、Integer 和 Long 值不再从 Data.isNull 返回 true,同时对缺失值和显式 null 的跟踪仍然正确。
由索引模型根据 Issue 内容生成。
描述
google-http-client uses sentinel objects like NULL_BOOLEAN to distinguish between fields being absent and explicitly set to null:
Those sentinel fields are using deprecated constructors like new Boolean(true) (the deprecation warnings were suppressed in https://github.com/googleapis/google-http-java-client/pull/1215).
JDK 28 introduces a preview of the value classes feature (https://openjdk.org/jeps/401). With JEP 401 boxed primitive classes like Boolean and Integer become value classes that don't have identity, so instance are compared by value:
new Boolean(true) == Boolean.TRUEwill evaluate totruenew Integer(0) == Integer.valueOf(0)will evaluate totrue
This causes google-http-client's Data.isNull(object) to return true for legitimate values.
With JEP 401, assertions like these will start to fail:
assertThat(Data.isNull(true)).isFalse();
assertThat(Data.isNull(0)).isFalse();
assertThat(Data.isNull(0L)).isFalse();
Possible fixes:
- Introduce a new API like
JsonNullable<Boolean>to replace the use ofNULL_BOOLEAN - Maintain a set of explicitly set fields, that could be queried instead of relying on sentinel values.
- 主要语言
- Java
- 星标
- 1.4k
- 派生
- 476
- 平均合并
- 10 小时 47 分钟
- 30 天内合并 PR
- 3
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
googleapis/google-http-java-client 的其他 Issue
-
Core: Validate header names and values to prevent CRLF injection可能已有人在做 @insaf021 于 106 天前认领。 未关闭priority: p3
难度 2/5 1-3 小时 新手友好度 78/100
-
Core: XmlPullParser processes external DTD entities (XXE) — disable FEATURE_PROCESS_DOCDECL in Xml#createParser()可能已有人在做 @insaf021 于 106 天前认领。 未关闭priority: p3
难度 2/5 1-3 小时 新手友好度 84/100
-
Core: LowLevelHttpResponse not disconnected when HttpResponse construction throws RuntimeException可能已有人在做 @insaf021 于 106 天前认领。 未关闭priority: p3
难度 2/5 1-3 小时 新手友好度 84/100
-
type: cleanup
难度 2/5 1-3 小时 新手友好度 68/100
-
org.apache.http.conn.ssl.SSLSocketFactory is deprecated可能重新可做 关联的 PR 已关闭且未合并。 未关闭priority: p2 type: cleanup
难度 2/5 1-3 小时 新手友好度 65/100
查看 googleapis/google-http-java-client 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 80/100
finos/fluxnova-bpm-platform#387 ·
维护者通常 4 天内回复
-
难度 1/5 1 小时以内 新手友好度 88/100
-
难度 2/5 1 小时以内 新手友好度 84/100
cpp-best-practices/project_validator#251 ·
维护者通常 1 天内回复
-
backend enhancement
难度 2/5 半天 新手友好度 70/100
damodharg6/payledger#16 ·
-
[Bug]: An initiative list with no current entry logs an error on every change可能已有人在做 @dwizard0 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复