美文网首页我爱编程
Java获得泛型参数类型

Java获得泛型参数类型

作者: flycode | 来源:发表于2018-05-26 17:31 被阅读0次

在Android开发中,使用Gson将json字符串转换为Java对象尤为常见。在这个转换过程中,通常会结合泛型参数、接口或者抽象类来封装处理。

 T t = new Gson().fromJson(response, type);

那如何来获取type呢?

接口实现

public interface ICallback<T> {
    void onSuccess(T t);
    void onFailure(String msg);
}

对于一个ICallback<T>类型的callback而言:

// 返回实现的接口
Type[] genericInterfaces = callback.getClass().getGenericInterfaces();
if (genericInterfaces[0] instanceof ParameterizedType) {
    ParameterizedType parameterizedType = (ParameterizedType) (genericInterfaces[0]);
    // 仅包含一个泛型参数
    Type type = parameterizedType.getActualTypeArguments()[0];
    // T为String
    if (type instanceof Class && TextUtils.equals(((Class<?>) type).getName(), String.class.getName())) {
        callback.onSuccess((T) response);
        return;
    }
    try {
        T t = new Gson().fromJson(response, type);
        callback.onSuccess(t);
     } catch (Exception e) {
        callback.onFailure("解析失败");
     } 
}else {
    // 无泛型参数
    callback.onSuccess((T) response);
}

抽象类实现

public abstract class AbstractCallback<T> {
    protected abstract void onSuccess(T t);
    protected abstract void onFailure(String msg);
}

同样,对于一个AbstractCallback<T>类型的callback而言:

Type superclass = callback.getClass().getGenericSuperclass();
if (superclass instanceof ParameterizedType) {
    ParameterizedType parameterizedType = (ParameterizedType) superclass;
    // 仅包含一个泛型参数
    Type type = parameterizedType.getActualTypeArguments()[0];
    // T为String
    if (type instanceof Class && TextUtils.equals(((Class<?>) type).getName(), String.class.getName())) {
        callback.onSuccess((T) response);
        return;
    }
    try {
        T t = new Gson().fromJson(response, type);
        callback.onSuccess(t);
    } catch (Exception e) {
        callback.onFailure("解析失败");
    }
} else {
     // 无泛型参数
    callback.onSuccess((T) response);
}

相关文章

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java 泛型

    01.泛型 泛型的本质是参数化类型,使用泛型可以获得更高级的抽象。 Java泛型(generics)是JDK 5 ...

  • java泛型

    java泛型 Java 泛型的参数只可以代表类,不能代表个别对象。 由于 Java 泛型的类型参数之实际类型在编译...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • Java获得泛型参数类型

    在Android开发中,使用Gson将json字符串转换为Java对象尤为常见。在这个转换过程中,通常会结合泛型参...

  • 泛型学习

    1.泛型是Java中参数化类型的方式。将类型也作为一种参数进行传递。2.它有泛型的方法,泛型参数,泛型类。3.泛型...

  • java泛型

    本质:类型参数化 java总结——泛型

  • Java并发编程

    Java泛型(类型参数化)接口或者类泛型,类型参数放在接口名或者类名后面方法中的泛型参数放在修饰符public/p...

  • spring 泛型处理

    java 泛型基础 泛型类型:泛型类型是在类型上参数化的泛型类或接口 泛型使用场景编译时前类型检查。定义为 Col...

网友评论

    本文标题:Java获得泛型参数类型

    本文链接:https://www.haomeiwen.com/subject/vbimjftx.html