com.greenpepper.reflect.JavaTypeLoader Maven / Gradle / Ivy
package com.greenpepper.reflect;
/**
* JavaTypeLoader class.
*
* @author oaouattara
* @version $Id: $Id
*/
public class JavaTypeLoader implements TypeLoader
{
private final Class type;
private final java.lang.ClassLoader classLoader;
/**
* Constructor for JavaTypeLoader.
*
* @param type a {@link java.lang.Class} object.
*/
public JavaTypeLoader( Class type )
{
this( type, Thread.currentThread().getContextClassLoader() );
}
/**
* Constructor for JavaTypeLoader.
*
* @param type a {@link java.lang.Class} object.
* @param classLoader a {@link java.lang.ClassLoader} object.
*/
public JavaTypeLoader(Class type, java.lang.ClassLoader classLoader)
{
this.type = type;
this.classLoader = classLoader;
}
/** {@inheritDoc} */
public void searchPackage(String prefix)
{
throw new UnsupportedOperationException();
}
/** {@inheritDoc} */
public void addSuffix(String suffix)
{
throw new UnsupportedOperationException();
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
public Type loadType(String name)
{
Class clazz = loadClass( name );
return classLoaded(clazz) && typeMatches(clazz) ? new Type(clazz) : null;
}
private boolean classLoaded(Class clazz)
{
return clazz != null;
}
private boolean typeMatches(Class clazz)
{
return type.isAssignableFrom(clazz);
}
/**
* loadClass.
*
* @param name a {@link java.lang.String} object.
* @return a {@link java.lang.Class} object.
*/
public Class loadClass(String name)
{
try
{
return classLoader.loadClass( name );
}
catch (ClassNotFoundException notFound)
{
return null;
}
catch (NoClassDefFoundError notFound)
{
return null;
}
}
}