【问题标题】:Generics in static methods静态方法中的泛型
【发布时间】:2012-08-26 03:51:55
【问题描述】:

我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从 JSON 字符串中解析事物并返回一个事物数组。

问题是这些东西有各种子类型,所以我创建了这个方法:

public static <E extends Thing> E[] parseThingsFromJSON(String body) {
    return parser.fromJson(body, E[].class);
}

调用者如何告诉这个方法E 是什么?或者有更好的方法吗?

【问题讨论】:

    标签: java generics static-methods


    【解决方案1】:

    你需要通过它。

    public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) {
        return parser.fromJson(body, eClass);
    }
    

    泛型主要是一种编译时特性。这意味着它在运行时不可用(有一些例外)

    在这种情况下,要使泛型类型在运行时可用,您必须将其作为附加参数传递。

    【讨论】:

    • 能否请您指出这个解决方案的一些解释?我不太清楚发生了什么,我想 ;) 这个额外的 Class 参数的目的是什么?
    • @wasyl 希望我的解释有所帮助。让我知道您还想知道什么。
    【解决方案2】:

    从内存来看,这与使用 Arrays.asList() 时遇到的问题类似

    这样就可以了

    Arrays.<MyOjbect>(new MyObject(), new MyObject());
    

    或者在您传递数组的特定情况下 例如

    Arrays.<Integer[]>asList(new Integer[]{new Integer(1)});
    

    这个方法在JDK中的签名是

    public static <T> List<T> asList(T... a){...}
    

    我觉得和你的差不多

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2010-10-30
      • 2012-12-04
      • 2010-10-16
      • 1970-01-01
      • 2011-07-14
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多