Я пишу программу для чтения данных из файла, который может быть в одном из нескольких форматов (на самом деле, в разных версиях одного и того же формата), и я использую отражение для вызова соответствующей функции для каждого формата. Предполагая, что формат файла представляет собой число, указанное в первом байте файла:
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{
...
}
}
У меня вопрос, злоупотребляю ли я / неправильно использую отражение? У меня такое ощущение, что я должен использовать наследование и создавать разные классы для каждого типа файлов с собственной процедурой "синтаксического анализа", но я не знаю тип файла, пока не начну синтаксический анализ ... и тогда я не смогу "уменьшить" и просто используйте что-то вроде ((DataFile_v1) this).parse()
, поэтому я немного растерялся.
Спасибо за ваше время!