【问题标题】:How do I get class type of generic list?如何获得通用列表的类类型?
【发布时间】:2017-03-29 13:07:17
【问题描述】:

我有这个方法

public <T> T PostQuery(String url, Object graph, Class<T> returnType)

我想这样称呼它

List<User> users = PostQuery("blabla", SomeObj, List<User>.class);

但我在最后一个参数上遇到错误。它允许我只写List.class,这使它成为一个字符串列表,而不是我想要的。

我该怎么做?

【问题讨论】:

  • 在运行时,你将只有List,所以只需发送List.class作为参数。

标签: java generics


【解决方案1】:

由于泛型的 Java 实现(类型擦除),没有 List&lt;User&gt;.class 只有 List.class。因此,要么只使用 List.class,要么您可以创建第二个方法,该方法已经返回这样的列表

public List<T> T PostQueryList(String url, Object graph, Class<T> returnType)
List<User> users = PostQueryList("blabla", SomeObj, User.class);

如果您确实需要访问 List&lt;User&gt;,您可能需要查看来自 Guava https://code.google.com/p/guava-libraries/wiki/ReflectionExplained 的 TypeTokens

【讨论】:

    【解决方案2】:

    据此: https://stackoverflow.com/a/2226038/1264582 有一个解决方法。只需使用泛型类的子类即可。

    【讨论】:

      【解决方案3】:

      仅使用 User.class 作为参数

      【讨论】:

        【解决方案4】:

        使用public &lt;T&gt; T PostQuery(String url, Object graph){} 就可以了,因为你在声明&lt;T&gt; 时已经为这个方法声明了一个泛型类型:

        public <T> T PostQuery(String url, Object graph){
            Object obj = null;
            //...
            return (T)obj;
        }
        

        【讨论】:

        • 我在函数内部使用结果类型
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多