如何将对象强制转换为Java中的字段类型

本文关键字:Java 字段 类型 转换 对象 | 更新日期: 2023-09-27 18:14:35

大家好,提前感谢大家。我在Java中使用反射来获取所有类字段,并使用来自反序列化JSON消息的值填充它们。但是我总是会得到像

这样的错误
    Exception in thread "Thread-2" java.lang.IllegalArgumentException: 
Can not set short field Message.Error to java.lang.String

这是它发生的片段:

public static Message Decode(String request) {
    JSONObject obj = new JSONObject(request);
    Message msg = new Message();
    for (Field fld :msg.getClass().getDeclaredFields())
        if (obj.has(fld.getName())) {
            try {
                msg.getClass().getField(fld.getName()).set(msg, obj.get(fld.getName()));
            } catch (IllegalAccessException e) {
                return null;
            } catch (NoSuchFieldException e) {
                return null;
            }
        }
    return msg;
}

这里我还没有使用任何强制转换,因为我还没有找到任何关于强制转换为动态类型的有用信息。也许有人也有同样的麻烦。

注:如果有人知道c#的相同解决方案,我也会很感激的。我的客户端是基于c#的

如何将对象强制转换为Java中的字段类型

看起来你是在尝试重新发明像gson库这样的东西,它允许我们简单地

Message msg = gson.fromJson(request, Message.class);
演示:

class Message{
    private short length;
    private String text;
    private String whatever;
    @Override
    public String toString() {
        return "Message [length=" + length + ", text=" + text + ", whatever=" + whatever
                + "]";
    }       
}
public class Demo {    
    public static void main(String[] args) {
        String request = "{'length':10, 'text':'foo bar'}";
        Gson gson = new Gson();
        Message msg = gson.fromJson(request, Message.class);
        System.out.println(msg);
    }
}

Result: Message [length=10, text=foo bar, whatever=null]