java - Java中的动态类
问题描述
我正在尝试构建一个简单的类,该类在扩展时为类提供两个函数save()
& read()
。此类将序列化子类并将其存储在 .ser 文件中。并对其进行反序列化并恢复状态。
我正在考虑使用构建器来初始化子类。这样,该类将始终从先前的状态开始,或者在需要时创建一个新状态。
Todo x = new Todo().Builder().className(Todo.class).build();
该save()
功能运行良好。
public void save(String fileName) {
try {
fout = new FileOutputStream(fileName+".ser");
out = new ObjectOutputStream(fout);
out.writeObject(this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在我正在使用的作为参数的Builder()
函数中,但现在我无法弄清楚我必须做什么。Todo.class
Class<?> className
生成器函数我想加载类的对象并返回它。在读取函数中我想更新类的状态。
解决方案
ObjectInputStream
创建并返回一个完整的对象,我不知道你想如何将它与你的构建器想法结合起来。这是从文件中读取任意类的对象的简单方法:
public static <T> T read(String fileName, Class<T> klass) throws IOException, ClassNotFoundException {
Path filePath = Path.of(fileName);
try (ObjectInputStream objectInputStream = new ObjectInputStream(Files.newInputStream(filePath))) {
return klass.cast(objectInputStream.readObject());
}
}
推荐阅读
- c - EOF 在 Windows 系统的 getchar() 和 scanf() 中是如何作用的?
- c# - WebAPI - 从请求中手动解析控制器和操作
- php - 使用 PHP 将调查插入 SQL 数据库
- curl - 使用 curl 时从标头获取 HTTP 响应状态代码的问题
- ssh - 如何通过 SSH(或 FTP)连接到 Blogger 主机?
- nginx - 我可以在 Nginx 中创建一个“私人”位置吗?
- javascript - 如何在opencart门户中创建可以出现在屏幕底部的通知对话框
- python - 使用正则表达式 (Python) 查找和添加缺失的子字符串
- javascript - ReactJS - Ajax 调用 - 合法在哪里?
- highcharts - Highstocks:在图例或图表上悬停时禁用垂直线