java - 如何从 object.getClass().getDeclaredField ("fieldname").getGenericType(); 返回的 List<T> 获取 typeArguments

标签 java jakarta-ee generics reflection

我已经解决这个问题大约2天了,但仍然无法解决。 我有这个方法:

public List<T> findByKeyValue(String key, String value, Object t) {
    Field field;
    Class<?> clazz = t.getClass();

    field = clazz.getDeclaredField(key);
    Type type = field.getType();

    if(type.equals(List.class)) {

        // HERE IS THE PROBLEM, the value of "field" is "public java.util.List com.cacobr.model.Video.categoryCollection" and categoryCollection is a List <Category>
        // **I need to get the class "Category" with Reflection**
        // The "field.getGenericType()" command returns "java.util.List <com.cacobr.model.Category>"
        // If I could use something like ".getActualTypeArguments()[0]" could return the class "Category" but I can't use this method after a "getGenericType()"

    ....
    }

我可以获得类(class)类别吗?

最佳答案

您应该能够转换为ParameterizedType:

Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
    ParamterizedType pt = (ParameterizedType) type;
    if (pt.getRawType() == List.class &&
        pt.getActualTypeArguments()[0] == Category.class) {
        ...
    }
}

关于java - 如何从 object.getClass().getDeclaredField ("fieldname").getGenericType(); 返回的 List<T> 获取 typeArguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27989292/

相关文章:

java - 部署在 tomcat 7.0 中的 websphere 7.0 JAXWS webservice 不工作

java - 了解 JNDI 和 ENC 体系结构

java - Java 中的通用观察者模式

c# - 泛型有什么好处,为什么要使用它们?

java - sql server查询从java运行缓慢

java - 如果视频不起作用,我如何在视频 View 中使用 if 语句

java - 从 EJB 创建文本文件,无需 java.io

java - 如何编写接受堆栈和队列的方法?

Java if 语句不会运行 - 测试 substr(0,1) 是否 == 00

java - 使用toString打印信息