Skip to content

Commit 8233507

Browse files
authored
Update java-features.cn.md
1 parent 76b754a commit 8233507

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

java-features.cn.md

+7-10
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ JsonIterator.setMode(DecodingMode.REFLECTION_MODE);
154154

155155
如果你想要最好的性能,但是你使用的平台又无法支持动态代码生成的时候,你可以选择静态代码生成。要启用静态代码生成,需要完成三件事情:
156156

157-
* 提前定义哪些 class 是需要编解码的
158-
* 把代码生成加入到 build 的过程中,比如 maven
159-
* 把模式切换为 static
157+
* 通过 CodegenConfig 提前定义哪些 class 是需要编解码的
158+
* 把代码生成加入到 build 的过程中,比如 maven/gradle
159+
* 在使用前,调用 CodegenConfig 的 setup 方法
160160

161161
首先我们来定义哪些class是需要编解码的
162162

@@ -167,6 +167,7 @@ public class DemoCodegenConfig implements CodegenConfig {
167167
public void setup() {
168168
// register custom decoder or extensions before codegen
169169
// so that we doing codegen, we know in which case, we need to callback
170+
JsonIterator.setMode(DecodingMode.STATIC_MODE); // must set to static mode
170171
JsoniterSpi.registerFieldDecoder(User.class, "score", new Decoder.IntDecoder() {
171172
@Override
172173
public int decodeInt(JsonIterator iter) throws IOException {
@@ -223,15 +224,11 @@ public class DemoCodegenConfig implements CodegenConfig {
223224

224225
产生的java代码会被写到你项目的 `src/main/java` 目录,作为你的代码的一部分。输出目录是通过workingDirectory来指定的。如果你不想改workingDirectory,也可以传递第二个参数给StaticCodeGenerator。
225226

226-
最后把模式切换一下
227+
把模式设置为 static 之后,动态代码生成就不会被自动触发了。如果对应的类没有预先生成的编解码代码,异常会被抛出。
227228

228-
```java
229-
JsonStream.setMode(EncodingMode.STATIC_MODE);
230-
JsonIterator.setMode(DecodingMode.STATIC_MODE); // set mode before using
231-
JsonIterator.deserialize(...
232-
```
229+
普通的 Java 项目,参见: https://github.com/json-iterator/java/tree/master/demo
233230

234-
把模式设置为 static 之后,动态代码生成就不会被自动触发了。如果对应的类没有预先生成的编解码代码,异常会被抛出。
231+
Android 项目,参见: https://github.com/json-iterator/java/tree/master/android-demo
235232

236233
# 对象绑定的多种姿势
237234

0 commit comments

Comments
 (0)