code: public static VersionUtil getInstance() {
  
      if (instance == null) {
        synchronized (VersionUtil.class) {
          if (instance == null) {
            VersionUtilImpl impl = new VersionUtilImpl();
            impl.initialize();
            instance = impl;
          }
        }
      }
      return instance;
    }
docs: This method gets the singleton instance of this {@link VersionUtilImpl}. <br>
  This design is the best compromise between easy access (via this indirection you have direct, static access to all
  offered functionality) and IoC-style design which allows extension and customization. <br>
  For IoC usage, simply ignore all static {@link #getInstance()} methods and construct new instances via the IoC
  container-framework of your choice. To wire up the dependent components everything is properly annotated using
  annotations (JSR-250 and JSR-330). If your container does NOT support this, you should consider using a better one.
  
  @return the singleton instance.