portnovкажется, вариант с вспомогательными классами + интроспекцией самый рабочий. Что-то типа:
void tryReadWithAnybody(Class potentialReader) {
Class adapter = loadClassByName(
potentialReader.name + "ReaderAdapter");
if (adapter != null) {
adapter.invokeMethod("read");
}
}