如何获取 TypeToken 的通用函数?

huangapple go评论78阅读模式
英文:

How to get Generic function of TypeToken?

问题

以下是翻译好的部分:

我有以下代码。我想获得一个通用解决方案,仅通过类引用来获取 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) 时,这并没有返回我预期的 Application 类型的 List TypeToken,似乎在使用 Type 方面出了一些问题。请帮我修复它。提前谢谢。

英文:

I have the following codes. I want to get a generic solution to get the TypeToken only passing the class reference.

Type application = new TypeToken&lt;List&lt;Application&gt;&gt;() {
}.getType();
Type bill = new TypeToken&lt;List&lt;Bill&gt;&gt;() {
}.getType();
Type payment = new TypeToken&lt;List&lt;Payment&gt;&gt;() {
}.getType();

I have tried to get the typeToken from an function only passing the class reference. What I have tried already.

private static &lt;T&gt; Type getType(Class&lt;T&gt;classType) {
    return new TypeToken&lt;List&lt;? extends T&gt;&gt;() {
    }.getType();
}

but when I call the method as getType(Application.class) this doesn't return me the List of Application TypeToken and something went wrong to use the Type. Please help me to fix it. Thanks in advance.

答案1

得分: 1

如果我理解您的需求正确,这应该可以实现:

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

更多信息请参阅ReflectionExplained

英文:

If I understand what you're looking for, this should do it:

static &lt;E&gt; TypeToken&lt;List&lt;E&gt;&gt; listToken(Class&lt;E&gt; elementClass) {
    return new TypeToken&lt;List&lt;E&gt;&gt;() {}
            .where(new TypeParameter&lt;E&gt;() {}, elementClass);
}

See ReflectionExplained for more info.

huangapple
  • 本文由 发表于 2020年9月17日 10:33:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/63930438.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定