Tadas Subonis wrote:or should I explain in choises.txt why I chose subclassing RuntimeExceptions and all will be ok?
I think the explanation writes itself (and is completely useless). If you throw a checked exception (like IOException) from e.g. the read-method, your code would not compile, because this exception is not declared in the given interface. So you can only use runtime exceptions in the Data class to throw (besides RecordNotFoundException).
I think you should carefully choose if you opt for a checked exception or a runtime one. If you do it carefully, exception handling will be a very powerful (and useful) asset. But if you do it wrong, it will result in a code mishmash (hard to maintain, extend,...)