Java 泛型參數的擷取

來源:互聯網
上載者:User

Gson中序列化帶泛型的類型的方式:

        Type fooType = new TypeToken<Foo<Bar>>() {}.getType();        gson.toJson(foo, fooType);        gson.fromJson(json, fooType);

其中Type為java.lang.reflect.Type介面

ParameterizedType為Type的子介面包含

 Type[] getActualTypeArguments() 
          Returns an array of Type objects representing the actual type arguments to this type.
 Type getOwnerType() 
          Returns a Type object representing the type that this type is a member of.
 Type getRawType() 
          Returns the Type object representing the class or interface that declared this type.

3個方法,用於擷取泛型型別。

原理:

對於一個類如果繼承了一個帶具體泛型參數的泛型類,則JVM可以擷取其父類的泛型參數。

    public static void main(String[] args) {        // 可以擷取泛型參數String        class AnonymousArrayListA extends ArrayList<String> {        }        AnonymousArrayListA aa = new AnonymousArrayListA();        Class typeA = (Class) ((ParameterizedType) aa.getClass().getGenericSuperclass()).getActualTypeArguments()[0];        System.out.println(typeA.getSimpleName());        // 無法擷取泛型參數        class AnonymousArrayListB<T> extends ArrayList<T> {        }                AnonymousArrayListB<String> bb = new AnonymousArrayListB<String>();        try {            Class typeB = (Class) ((ParameterizedType) bb.getClass().getGenericSuperclass()).getActualTypeArguments()[0];            System.out.println(typeB.getSimpleName());        } catch (Exception e) {            System.out.println("Get type failed.");        }    }

Type fooType = new TypeToken<Foo<Bar>>() {}.getType(); 即通過繼承了一個包含具體泛型參數的TypeToken的匿名類來擷取Foo<Bar>這個類型,用於序列化/還原序列化。reference:http://www.artima.com/weblogs/viewpost.jsp?thread=208860

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.