Code Monkey home page Code Monkey logo

typebuilder's Introduction

TypeBuilder

一个用于生成泛型的简易Builder

Example for List<String>

Type type = TypeBuilder
        .newInstance(List.class)
        .addTypeParam(String.class)
        .build();

Example for List<? super String>

Type type = TypeBuilder
        .newInstance(List.class)
        .addTypeParamSuper(String.class)
        .build();

Example for List<? extends CharSequence>

Type type = TypeBuilder
        .newInstance(List.class)
        .addTypeParamExtends(CharSequence.class)
        .build();

Example for Map<String, String[]>

Type type = TypeBuilder
        .newInstance(HashMap.class)
        .addTypeParam(String.class)
        .addTypeParam(String[].class)
        .build();

Example for Map<String, List<String>>

Type type = TypeBuilder
        .newInstance(Map.class)
        .addTypeParam(String.class)
        .beginSubType(List.class) //开始 List<String> 部分
        .addTypeParam(String.class) //设置List的泛型值
        .endSubType() //结束 List<String> 部分
        .build();

Download

Get it from JitPack repository use Gradle or Maven.
Download JAR and Source

有什么用

当你无法通过子类去获取泛型时,不用写一长串的嵌套或去实现部分Type接口。

License

Copyright 2016 ikidou

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

typebuilder's People

Contributors

ikidou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

typebuilder's Issues

无法支持subType带有wildcard的情况

例如要build这个:java.util.Map<? extends java.lang.Comparable<? super java.lang.Number>, java.lang.String>

"? extends java.lang.Comparable" 这部分因为带有wildcard, 所以TypeBuilder的beginSubType方法无法支持

小问题类似二维数组应该怎么使用

{"code":1,"msg":"成功","data":[[{"code":1,"msg":"成功"},{"code":2,"msg":"成功"}],[{"code":3,"msg":"成功"},{"code":4,"msg":"成功"}]]}

类似这样的二维数组应该怎么使用这个工具类?

可否实现一个字符串到Type的解析器呢

例如 String typeStr = "java.util.Map<java.lang.String, java.util.List<java.lang.String[]>>"
可以将typeStr 转化成Type , 效果和这个一样:
Type type = TypeBuilder
.newInstance(Map.class)
.addTypeParam(String.class)
.beginSubType(List.class)
.addTypeParam(List[].class)
.endSubType()
.build();

小疑问

我也是封装Gson看到简书文章过来的,花了好长时间才感觉基本理解了这个犀利的TypeBuilder,封装的太好了,佩服! 有个小疑问:

return getTypeString("? extends ", upper);
} else {
return getTypeString("? super ", lower);
}
}

private String getTypeString(String suffix, Class[] type) {
    StringBuilder sb = new StringBuilder();
    sb.append(suffix);

这个地方感觉应该用prefix

Gson 解析的时候Expected a string but was BEGIN_OBJECT

楼主,你好,我遇到的问题是这样的,有时间的 话麻烦解答一下

比如有这样的json字符串

{"showapi_res_code": 0,
  "showapi_res_error": "1",
  "showapi_res_body": {
    "totalNum": 44,
    "ret_code": 0
   }
 }

用下面这个解析的话是不会出错的

Bean bean = gson.fromJson(stringFromSource,
Bean.class);

public class Bean{
    int showapi_res_code;
    String showapi_res_error;
    Body showapi_res_body;
    
    public static class Body{
        int totalNum;
        int ret_code;
    }
}

用这一种解析的时候出错

Bean1 bean1 = gson.fromJson(stringFromSource, Bean1.class);
public class Bean1 {
	int showapi_res_code;
    String showapi_res_error;
    String showapi_res_body;
    
   
}

错误如下

Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 3 column 24 path $.showapi_res_body

目前fastjson 之支持这种格式的,Gson有没有办法通过自定义支持这种格式? 谢谢

有啥作用呢

你这个的前提是我已经知道Type是啥了 ,然后通过你的builder生成type ,感觉这样更加麻烦了啊

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.