Если все ваши реальные случаи настолько просты, как пример в вашем вопросе, то вы можете использовать то, что вам нравится (то есть то, что вы уже использовали ранее).
Но если существуют более сложные случаи, вы должны сначала предоставить какой-то синтаксический анализатор. Даже для последней строки в вашем примере не так просто сгенерировать необходимый код:
public Object buildObject (Parser parser, Item param) {
if (!parser.hasNext ()) {
return param.getValue ();
}
Item nextItem = parser.getNextItem (); //1st call: "TestString", 2nd call: "StringReader"
if (nextItem.isParameter ()) { //1st call: true, 2nd call: false
return buildObject (parser, nextItem);
} else if (nextItem.isClassName () { //2nd call: true
Class c = Class.forName (nextItem.getStringValue ());
Constructor ctr = c.getConstructor (param.getClassName ()); //getClassName returns "String"
Object obj = ctr.newInstance (param.getValue ());
return buildObject (parser, new Item (obj));
} else {
throw new ParseException ("Illegal input");
}
}
В этом коде все еще много ошибок (нет try / catch, нет необходимой логики), но оно демонстрирует основную идею (и эта идея о том, что это не такая простая задача).
Может быть, стоит поискать некоторые сторонние библиотеки (даже если вам придется пожертвовать форматом своего файла и принять их формат).