作者:Eyebros | 来源:互联网 | 2022-12-09 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;
}
我知道我可以简单地返回类型object
,但我想知道如何使用泛型.
谢谢你的帮助
1> rgettman..:
该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 deSerialize(String path, Class clazz) throws IOException {
try {
ObjectInputStream o = new ObjectInputStream(new FileInputStream(path));
return clazz.cast(o.readObject());
}catch(Exception e) {
e.printStackTrace();
}
return null;
}