通过反射获取通用类型的超级接口

lionyu
interface BaseDao<T> { }

interface UserDao extends BaseDao<User> { }

interface DeptDao extends BaseDao<Department> { }

我需要一个Entity通过Dao获取函数的函数,像这样:

func(UserDao.class) return User.class
func(DeptDao.class) return Deparment.class  

而且我喜欢添加annotationdao,就像这样:

@Entity(User.class)
interface UserDao extends BaseDao

-------------------------------------------------- -------

受dimo414的建议启发,这是我的解决方案:

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Main {

public static void main(String[] args) {
    // if A and B are Class, then it be 'B.class.getGenericSuperclass()'
    Type genType = B.class.getGenericInterfaces()[0];

    if (genType instanceof ParameterizedType) {
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        Class<?> clz = (Class) params[0];
        System.out.println(clz); // class java.lang.String
    }
}}

interface A<T> {}

interface B extends A<String> {}
dimo414

看一下Guava的TypeToken,它所做的(我认为)是您正在描述的。有关“反射说明”的更多信息,请参见

TypeCapture.capture()方法获取父类的泛型类型:

Type capture() {
  Type superclass = getClass().getGenericSuperclass();
  checkArgument(superclass instanceof ParameterizedType, "%s isn't parameterized", superclass);
  return ((ParameterizedType) superclass).getActualTypeArguments()[0];
}

这就是TypeToken“魔术”的原理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过反射找到实现通用接口的类型

来自分类Dev

获取通用接口的实现类型

来自分类Dev

使用反射获取字段的通用类型

来自分类Dev

使用通用类型对象的反射获取属性

来自分类Dev

通过反射在类上调用多个通用接口方法

来自分类Dev

通过C#中的反射获取接口的基本接口

来自分类Dev

仅使用反射通过类型参数区分通用方法?

来自分类Dev

类型类型不能是Do的超级接口。超级接口必须是接口

来自分类Dev

PHP在Hack中使用反射获取通用类型

来自分类Dev

飞镖,如何使用反射获取方法参数的通用类型?

来自分类Dev

如何使用反射获取特定类型的通用列表

来自分类Dev

PHP在Hack中使用反射来获取通用类型

来自分类Dev

如何通过反射获取通用参数名称

来自分类Dev

SlidingActivity类型不能是MainActivity的超级接口;超级接口必须是接口

来自分类Dev

如何通过接口获取指针的值类型?

来自分类Dev

嵌套的通用类型接口

来自分类Dev

接口通用返回类型

来自分类Dev

如何从实现类中获取通用接口的类型参数?

来自分类Dev

通过反射处理通用属性

来自分类Dev

在Swift中获取数组的Element类型(通过反射)

来自分类Dev

从列表<T>反射获取列表<>(来自通用容器类型的容器类型)

来自分类Dev

使用通用类型的接口通用类型的类

来自分类Dev

在实现具有通用返回类型的方法时,通过反射实现多个方法

来自分类Dev

在Java中,是否可以通过反射找出集合getter的通用类型?

来自分类Dev

如何在Java中通过反射强制转换通用基类型?

来自分类Dev

在Java中,是否可以通过反射找出集合getter的通用类型?

来自分类Dev

如何在Java中通过反射强制转换通用基本类型?

来自分类Dev

C#反射-从基类中获取父类的通用参数类型

来自分类Dev

反射无法获取从泛型接口重写的方法的实际参数类型?

Related 相关文章

  1. 1

    通过反射找到实现通用接口的类型

  2. 2

    获取通用接口的实现类型

  3. 3

    使用反射获取字段的通用类型

  4. 4

    使用通用类型对象的反射获取属性

  5. 5

    通过反射在类上调用多个通用接口方法

  6. 6

    通过C#中的反射获取接口的基本接口

  7. 7

    仅使用反射通过类型参数区分通用方法?

  8. 8

    类型类型不能是Do的超级接口。超级接口必须是接口

  9. 9

    PHP在Hack中使用反射获取通用类型

  10. 10

    飞镖,如何使用反射获取方法参数的通用类型?

  11. 11

    如何使用反射获取特定类型的通用列表

  12. 12

    PHP在Hack中使用反射来获取通用类型

  13. 13

    如何通过反射获取通用参数名称

  14. 14

    SlidingActivity类型不能是MainActivity的超级接口;超级接口必须是接口

  15. 15

    如何通过接口获取指针的值类型?

  16. 16

    嵌套的通用类型接口

  17. 17

    接口通用返回类型

  18. 18

    如何从实现类中获取通用接口的类型参数?

  19. 19

    通过反射处理通用属性

  20. 20

    在Swift中获取数组的Element类型(通过反射)

  21. 21

    从列表<T>反射获取列表<>(来自通用容器类型的容器类型)

  22. 22

    使用通用类型的接口通用类型的类

  23. 23

    在实现具有通用返回类型的方法时,通过反射实现多个方法

  24. 24

    在Java中,是否可以通过反射找出集合getter的通用类型?

  25. 25

    如何在Java中通过反射强制转换通用基类型?

  26. 26

    在Java中,是否可以通过反射找出集合getter的通用类型?

  27. 27

    如何在Java中通过反射强制转换通用基本类型?

  28. 28

    C#反射-从基类中获取父类的通用参数类型

  29. 29

    反射无法获取从泛型接口重写的方法的实际参数类型?

热门标签

归档