代码之家  ›  专栏  ›  技术社区  ›  Michael

静态方法中的泛型

  •  1
  • Michael  · 技术社区  · 14 年前

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

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

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

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   Peter Lawrey    14 年前

    你需要通过它。

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

    泛型在很大程度上是一个编译时特性。这意味着它在运行时不可用(有些例外)

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

        2
  •  1
  •   Josh Crozier HBP    12 年前

    在内存中,这与使用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){...}
    

    我想和你的差不多