@Override
	public Set<Class<?>> resolveByInterface(final Class<?> interfaceClass)
			throws IOException {
		Matcher<Class<?>> matcher = new Matcher<Class<?>>() {
			
			public boolean matches(Class<?> clazz) {
				Class<?>[] interfaces = clazz.getInterfaces();
				
				for (Class<?> c : interfaces) {
					if (c.equals(interfaceClass)) {
						return true;
					}
				}
				
				if (clazz.getSuperclass() != null) {
					return matches(clazz.getSuperclass());
				} else {
					return false;
				}
			}
			
		};
		return resolve(matcher);
	}
@Override
	public Set<Class<?>> resolveByInterface(final Class<?> interfaceClass)
			throws IOException {
		Matcher<Class<?>> matcher = new Matcher<Class<?>>() {
			
			public boolean matches(Class<?> clazz) {
				Class<?>[] interfaces = clazz.getInterfaces();
				
				for (Class<?> c : interfaces) {
					if (c.equals(interfaceClass)) {
						return true;
					}
				}
				
				if (clazz.getSuperclass() != null) {
					return matches(clazz.getSuperclass());
				} else {
					return false;
				}
			}
			
		};
		return resolve(matcher);
	}
@ Override public Set < Class < ? > > resolveByInterface ( final Class < ? > interfaceClass ) throws IOException { Matcher < Class < ? > > matcher = new Matcher < Class < ? > > ( ) { public boolean matches ( Class < ? > clazz ) { Class < ? > [ ] interfaces = clazz . getInterfaces ( ) ; for ( Class < ? > c : interfaces ) { if ( c . equals ( interfaceClass ) ) { return true ; } } if ( clazz . getSuperclass ( ) != null ) { return matches ( clazz . getSuperclass ( ) ) ; } else { return false ; } } } ; return resolve ( matcher ) ; }
Resolves the classes that implements the specified interface as
{@code java.lang.Class}.

@param interfaceClass The interface being implemented.
@return Classes that implements the specified interface as
{@code java.lang.Class}.
@throws IOException If any I/O access fails while traversing the search
path.
Resolves the classes that implements the specified interface as { @code java . lang . Class } .