gpt4 book ai didi

java - 声纳性能 - 类型 token 的静态内部类

转载 作者:行者123 更新时间:2023-12-01 23:50:13 25 4
gpt4 key购买 nike

Sonar 说“性能 - 可以重构为命名静态内部类。类 DataServiceImpl$2 可以重构为命名静态内部类”。

paramsClass1.add(new TypeToken<List<EntityFieldMap>>(){}.getType());

因此创建了一个静态类,它工作正常,但是当我将其设为通用时,它不起作用。看看这个片段。

import com.google.gson.reflect.TypeToken;
public class TokenTest
{
public static class MyInnerClass1<T> extends TypeToken<T> {};
public static class MyInnerClass2<Integer> extends TypeToken<Integer> {};

public static void main(String[] args)
{
//prints T
System.out.println(new MyInnerClass1<Integer>().getType());
//prints Integer which is desired
System.out.println(new MyInnerClass2().getType());
}
}

最佳答案

TypeToken很特别,因为它实际上依赖于那个匿名类。而你的通用类型 token 不起作用的原因就是 TypeToken 的原因首先存在!泛型将在运行时被删除。使用固定类型参数扩展泛型类是绕过该限制的一种方法。

请参阅JavaDoc of Guava TypeToken (我知道你在谈论 GSON,但这两个库的用法和功能是相同的,并且 Guava 拥有更好的文档):

Note that it's critical that the actual type argument is carried by a subclass. The following code is wrong because it only captures the <T> type variable of the listType() method signature; while <String> is lost in erasure:

class Util {
static <T> TypeToken<List<T>> listType() {
return new TypeToken<List<T>>() {};
}
}

TypeToken<List<String>> stringListType = Util.<String>listType();

我的建议:忽略 TypeToken 的此警告(理想情况下以自动化方式,或者通过手动添加异常(exception))。

关于java - 声纳性能 - 类型 token 的静态内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com