【问题标题】:How to get all types of the inner structures of a nested type?如何获取嵌套类型的所有类型的内部结构?
【发布时间】:2020-03-03 10:20:17
【问题描述】:

下面有个函数,

public void park( List<List< List< Integer>>> l){ System.out.println("park"); }

当我尝试使用 Method.getParameters() + Parameter.getParameterizedType() 时,我得到了

 java.util.List< java.util.List<java.util.List<java.lang.Integer>>>>

但是,我需要获取嵌套结构内侧的类型,例如 java.util.List>Integer强> .当我得到它时,我使用 getAnnotationsByType 来获取内部结构的所有注释。

我曾想过使用Parameter.getParameterizedType().toString()来解析嵌套结构,但是即使我这样做了,我也不认为可以将类型字符串转换为Type。

是否可以获得嵌套结构的内部类型?任何事情都值得赞赏。

【问题讨论】:

    标签: java generics reflection


    【解决方案1】:

    您可以通过ParameterizedType接口获取此信息。

    例如:

    final Type parameterType = method.getGenericParameterTypes()[0]; // List<List<List<Integer>>>
    
    if (parameterType instancof ParameterizedType) {
        final Type nextDown // List<List<Integer>>
            = ((ParameterizedType) parameterType).getActualTypeArguments();
    }
    

    并不断重复,直到它不是ParameterizedType

    【讨论】:

    • 顺便说一句,因为我需要使用 Parameter.getAnnotations。有没有好办法把这里的 Type 转为 Paramter?
    • 假设您已经知道如何获取Parameter,那么Parameter 上的getParameterizedType() 方法Object 将返回ParameterizedType(如果它确实是ParameterizedType) .因此,用parameter.getParameterizedType(); 替换第一行应该保持其他所有内容相同。
    • 你不能返回其他方式(因为,给定一个Type,不能保证有那个类型的Parameter,或者只有一个)。
    • 这是另一个问题,我很乐意回答,但最好作为另一个问题提出(或者通过编辑和添加到这个问题,尽管接受的答案似乎有点奇怪) . 但是除了使用method.getAnnotatedParameterTypes();AnnotatedType#getAnnotatedActualTypeArguments();之外,您实际上会走上与上述相同的路线。
    • 好的,我再问一个问题。非常感谢您所做的一切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2011-03-26
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多