为了账号安全,请及时绑定邮箱和手机立即绑定

返回未知类型

返回未知类型

慕哥9229398 2021-06-07 15:17:33
目前我正在尝试编写一个返回未知对象类型(序列化)的方法。但是,我不断收到来自 java 的错误,要求我提供一个类型 - 但显然,我不知道反序列化对象的具体类型是什么。这是代码:public static <?> T deSerialize(String path) throws IOException {//Line in question    try {        ObjectInputStream o = new ObjectInputStream(new FileInputStream(path));        return o.readObject();    }catch(Exception e) {        e.printStackTrace();    }    return null;}我知道我可以简单地返回 type object,但我想知道如何使用泛型来做到这一点。谢谢你的帮助
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

中的readObject方法ObjectInputStream返回Object对正确类型的引用。


从 ObjectInputStream 中读取一个对象。读取对象的类、类的签名以及类及其所有超类型的非瞬态和非静态字段的值。


...


应该使用 Java 的安全转换来获得所需的类型。


因此,当您调用该方法时,您应该让调用者将其转换为正确的类型。


// Non-generic method.

public static Object deSerialize(String path) throws IOException {


// ...

YourType foo = (YourType) deSerialize(path);

如果必须使其泛型,则必须有一个类型见证 a Class,它可以为您执行动态类型转换,以便编译器在编译时和运行时检查类型Class.cast。仍然由调用者提供正确的Class.


public static <T> T deSerialize(String path, Class<T> clazz) throws IOException {

    try {

        ObjectInputStream o = new ObjectInputStream(new FileInputStream(path));


        return clazz.cast(o.readObject());

    }catch(Exception e) {

        e.printStackTrace();

    }

    return null;

}


查看完整回答
反对 回复 2021-06-10
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信