【问题标题】:How to get Generic function of TypeToken?如何获取 TypeToken 的泛型函​​数?
【发布时间】:2020-09-17 10:57:27
【问题描述】:

我有以下代码。我想得到一个通用的解决方案来让TypeToken 只通过类引用。

Type application = new TypeToken<List<Application>>() {
}.getType();
Type bill = new TypeToken<List<Bill>>() {
}.getType();
Type payment = new TypeToken<List<Payment>>() {
}.getType();

我试图从只传递类引用的函数中获取 typeToken。我已经尝试过。

private static <T> Type getType(Class<T>classType) {
    return new TypeToken<List<? extends T>>() {
    }.getType();
}

但是当我将该方法称为getType(Application.class) 时,这不会返回应用程序类型令牌列表,并且使用类型出现问题。请帮我修复它。提前致谢。

【问题讨论】:

  • 由于类型擦除而无法实现。 TypeToken 存在的原因是为了绕过类型擦除。 stackoverflow.com/a/30007018/2398020
  • 非常感谢。我只是浪费了很多时间来探索解决方案
  • @MingweiSamuel 我认为您误解了这个问题。外部类型始终为List。仅内部类型将由 classType 指定。
  • @shmosel 我在想Class&lt;E&gt; elementClass 因为该方法的参数会遭受类型擦除,而TypeToken&lt;E&gt; elementToken 不会,但我还没有实际测试过代码
  • @MingweiSamuel 没有理由这样,考虑到您可以轻松地从Class 构造TypeToken

标签: java


【解决方案1】:

如果我了解您要查找的内容,应该这样做:

static <E> TypeToken<List<E>> listToken(Class<E> elementClass) {
    return new TypeToken<List<E>>() {}
            .where(new TypeParameter<E>() {}, elementClass);
}

请参阅ReflectionExplained 了解更多信息。

【讨论】:

  • 无法解析方法'where(anonymous com.google.common.reflect.TypeParameter, com.google.gson.reflect.TypeToken)'
  • 这是一个糟糕的导入。我假设你问的是番石榴?
  • 我修复了导入。请提供demo使用方法
  • 发生了什么?
  • 必需类型:TypeToken 提供:类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多