Loading a class dynamically using the DRY principle

I needed to load a bunch of classes dynamically based on a configuration file. As I am a big fan of the Don’t Repeat Yourself (DRY) principle (who isn’t?!?!), I didn’t want to type/copy the same code but use a reusable function. After some playing around I came up with the following code.

  def splitter = createInstance[Splitter](config.getString("downloader.dependencies.splitter"))
  def merger = createInstance[Merger](config.getString("downloader.dependencies.merger"))
  def cleaner = createInstance[Cleaner](config.getString("downloader.dependencies.cleaner"))

  private def createInstance[T](classFQN: String) = {
    val classLoader = getClass.getClassLoader
    exceptionWrapper {
  private def exceptionWrapper[T](f: => T) = {
    try {
    } catch {
      case e: ClassNotFoundException => throw e

To further improve the readability of the code I added the exception wrapper. I think it is pretty neat and readable code. What do you think? Happy coding 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *