Joh*_* B. 6 java reflection casting
我正在编写一个程序来读取文件中的数据,该文件可能是多种格式之一(实际上是相同格式的不同版本),我正在使用反射来为每种格式调用相应的函数.假设文件格式是在文件的第一个字节上指定的数字:
Class DataFile extends Model {
...
Blob file
...
public void parse() throws Exception{
InputStream is = file.get();
Class c = Class.forName("models.DataFile");
Method m = c.getMethod("parse_v"+is.read(), (Class []) null);
m.invoke(this, (Object []) null);
}
public void parse_v0() throws Exception{
...
}
public void parse_v1() throws Exception{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我是在滥用/滥用反思吗?我觉得我应该使用继承并使用自己的"解析"过程为每个文件类型创建一个不同的类,但在开始解析之前我不知道文件类型...然后我不能"低估"只是使用这样的东西((DataFile_v1) this).parse()我有点迷失.
感谢您的时间!
这没有什么根本性的错误,但是更灵活和可扩展的方法来做同样的事情就是将版本信息用作a中的键Map,并将值放在Mapbe handler对象中.然后任何代码都可以注册一个处理程序(处理程序都可以实现一个公共接口),你的读者代码可以只查找处理程序Map并调用它.
一定要处理Map不包含特定版本处理程序的情况!
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |