如何在 Java 中使用 TypeTokens 进行转换?

How do I perform Casting with TypeTokens in Java?

我正在将 TypeToken 传递给一个方法。下面的代码有效但我担心如果没有明确定义 Object list 更具体的东西会在以后困扰我但是我找不到一种方法将它定义为或将它转换为其他任何东西而不会出现编译器错误或警告。我似乎应该有办法做类似 (listTypeToken.getType()) list = ...

的事情

这是定义 TypeToken:

的代码
 TypeToken<List<ServerInfo>> listTypeToken =  new TypeToken<List<ServerInfo>>(){};

这是我使用 TypeToken 的代码。我认为 Object list 应该更具体一些。

public static <T> void processJson(GsonBuilder gsonBuilder, 
                                   String jsonString, 
                                   String action, 
                                   TypeToken<T> listTypeToken)
{
    //Trimmed from brevity
    Object list = gson.fromJson(jobject.get(action).getAsJsonArray(),
                                listTypeToken.getType());
}

这是其他成功的方法之一,但我不确定它是否合适:

@SuppressWarning("rawtypes")
List list = gson.fromJson(jobject.get(action).getAsJsonArray(),
                                listTypeToken.getType());

fromJson returns a T 所以正确的方法是这样的:

T list = gson.fromJson(jobject.get(action).getAsJsonArray(),
                                listTypeToken.getType());

如果您确定 T 始终是 List 的子类型,那么您需要在方法的声明中提供约束:

public static <T extends List<?>> void processJson(...)

或者可能是这个,它可以让您使用 List:

的元素
public static <E, T extends List<E>> void processJson(...)