gpt4 book ai didi

java - 将类型传递给方法并更改响应

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:33 25 4
gpt4 key购买 nike

我从 Java 的调用中接收 JSON,我想将其解析为具有“info”属性的对象,该属性将根据调用者更改类型。

public <T> ExternalCallBaseResult<T> parseExternalResultJson(String res)
{
Type collectionType = new TypeToken<ExternalCallBaseResult<T>>(){}.getType();
return Global.gson.fromJson(res, collectionType);
}

我想这样调用这个方法:

ExternalCallBaseResult<GetUserInfoResult_Info> result = global.parseExternalResultJson(res);

给定类(class):

public static class ExternalCallBaseResult<T>
{
public int callbackid = 0;
public int success = 1;
public T info = null;
}

我收到错误:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.cht.params.Params$GetUserInfoResult_Info

编辑:我看到这个问题的答案:gson: parametrized fromJson depending on the Type但是有没有办法在方法调用时不必发送 TypeToken 呢?

最佳答案

我希望我已经明白你想要实现的目标,当我早些时候发表评论时,我以为这是别的东西,但现在我想我明白了,像这样的事情怎么样?

public ExternalCallBaseResult<?> parseExternalResultJson(String res)
{
Class<?> c = Class.forName(getType());
return ExternalCallBaseResult(c.cast(Global.gson.fromJson(res)));
}

编辑:好吧,我不是 100% 确定我明白你的意思,所以我会尝试举一个例子并告诉我我是否正确

假设我们有一个类(class)

class A<T> {
T t;
A(T t) {this.t=t;}
}

我们有一个函数 foo,我们希望它返回 A,但 SomeActualType 直到运行时才知道,我们从一些 json 中获取它

public A<?> foo(String json) {
Class<?> c = Class.forName(getTypeFromJson(json)); //this will load the class of the required type
Object o = parseJson(json); //say this parses the json and returns some object according to it
A a = new A(c.cast(o));
return a;
)

现在 foo 将返回 A,其中包含我们从 json 收到的类型(我省略了 try catch 或 throws 声明等内容)

希望这有帮助

关于java - 将类型传递给方法并更改响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973876/

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