使用枚举类型做为 javabean

2020-11-17  本文已影响0人  李云龙_

使用枚举类型做为 javabean

接口返回的 json 中状态一般是 Int 类型的,如果不使用枚举则在代码中不知道这个 Int 是什么具体类型,使用枚举也不会耗费多少性能。

1. json 格式
{
    "box":{
        "name":"hat",
        "price":200,
        status : 2
    }
}
2. 枚举变量
enum class BoxStatusType(val status: Int) {
    S_NEW(0),
    S_SHOW(1),
    S_ACTIVE(2),
    S_END(3);

    companion object {
        fun buildStatus(s: Int): BoxStatusType? {
            for (status in BoxStatusType.values()) {
                if (s == status.status) {
                    return status
                }
            }
            return null
        }
    }
}
3. javaBean
open class Box {
    var name: String = ""
    var price: Int = 0
    var status: BoxStatusType? = null
}
4. 自定义 JsonSerializer
class BoxStatusTypeSerializer : JsonSerializer<BoxStatusType>, JsonDeserializer<BoxStatusType> {
    override fun serialize(src: BoxStatusType?, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement {
        return JsonPrimitive(src?.status)
    }

    override fun deserialize(json: JsonElement, typeOfT: Type?, context: JsonDeserializationContext?): BoxStatusType? {
        return BoxStatusType.buildStatus(json?.asInt)
    }

}
5. 注册自定义的 JsonSerializer
    private static Retrofit getRetrofitInstance() {
        Gson gson = new GsonBuilder()
                .registerTypeAdapter(BoxStatusType.class, new BoxStatusTypeSerializer())
                .create();
        if (mRetrofit == null) {
            synchronized (HTTPCenter.class) {
                if (mRetrofit == null) {
                    mRetrofit = new Retrofit.Builder()
                            .baseUrl(HTTPService.Companion.getSERVICE_DEFAULT())
                            .addConverterFactory(GsonConverterFactory.create(gson))
                            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                            .client(initOkHttpClient()).build();
                }
            }
        }
        return mRetrofit;
    }
上一篇 下一篇

猜你喜欢

热点阅读