返回未知类型

时间:2018-07-24 18:06:48

标签: java generics

当前,我正在尝试编写一种返回未知对象类型(序列化)的方法。但是,我不断从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;

}

我知道我可以简单地返回类型object,但是我想知道如何使用泛型。

感谢您的帮助

1 个答案:

答案 0 :(得分:5)

readObject method in ObjectInputStream返回对正确类型的Object引用。

  

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

...

  

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

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

// Non-generic method.
public static Object deSerialize(String path) throws IOException {

// ...
YourType foo = (YourType) deSerialize(path);

如果必须使其通用,则必须具有类型见证人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;
}