java - 返回未知类型
问题描述
目前我正在尝试编写一个返回未知对象类型(序列化)的方法。但是,我不断收到来自 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
,但我想知道如何使用泛型来做到这一点。
谢谢你的帮助
解决方案
中的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;
}
推荐阅读
- .net-core - 在 Visual Studio 中仅显示 NuGet 包的 LTS 更新
- python-3.x - 如何在不打开窗口的情况下创建 matplotlib 图
- angular - 为什么我的页面上没有加载 formGroup?我该如何解决这个问题?
- ios - 重置主要内容视图 - Swift UI
- python - 当现金和产品的差额为负时,我怎么做现金输出不足
- sql - 删除 Presto SQL 兼容数据库 (AWS Athena) 中数据中的双引号?
- c# - 如何指定要在 SendGrid 中使用的模板版本?
- javascript - 如何在不同页面上显示具有不同 API 数据的特定组件
- java - 为什么这种助焊剂不在单线程中执行?
- ios - Swift - 连接设备后在后台发布数据