code: public static LinkedHashSet<Class<?>> getInterfaceImplementationsInPackage(Class<?> interfaze, String packageName, boolean recursive) throws ReflectionException {
          Validate.notNull(interfaze);
          if (!interfaze.isInterface()) {
              throw new ParameterException("Parameter is not an interface");
          }
  
          LinkedHashSet<Class<?>> classesInPackage = getClassesInPackage(packageName, recursive);
          try {
              LinkedHashSet<Class<?>> interfaceImplementationsInPackage = new LinkedHashSet<>();
              for (Class<?> classInPackage : classesInPackage) {
                  if (getInterfaces(classInPackage).contains(interfaze)) {
                      interfaceImplementationsInPackage.add(classInPackage);
                  }
              }
              return interfaceImplementationsInPackage;
          } catch (Exception e) {
              throw new ReflectionException(e);
          }
      }
docs: <p>
  Returns a {@link LinkedHashSet} of {@link Class} objects containing all
  classes of a specified package (including subpackages) which implement
  the given interface.
  </p>
  <p>
  Example:
  </p>
  
  <pre>
  String pack = &quot;de.uni.freiburg.iig.telematik.sepia&quot;;
  Class&lt;?&gt; interf = PNParserInterface.class;
  LinkedHashSet&lt;Class&lt;?&gt;&gt; classes = ReflectionUtils.getInterfaceImplementations(interf, pack);
  for (Class&lt;?&gt; c : classes) {
  System.out.println(c);
  }
  
  // class de.uni.freiburg.iig.telematik.sepia.parser.petrify.PetrifyParser
  // class de.uni.freiburg.iig.telematik.sepia.parser.pnml.PNMLParser
  </pre>
  
  @param interfaze Interface which should be implemented.
  @param packageName Package to search for classes.
  @param recursive <code>true</code> if subpackages should be considered,
  too.
  @return {@link LinkedHashSet} of {@link Class} objects implementing the
  given interface in the specified package.
  @throws ReflectionException