package com.github.czyzby.kiwi.util.gdx.asset.lazy.provider;
import com.badlogic.gdx.utils.GdxRuntimeException;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import com.badlogic.gdx.utils.reflect.ReflectionException;
/** A simple implementation of ObjectProvider that invokes no-argument constructor of passed class on call. For more
* complex objects providers, you still need custom implementations. Note that the class handled by the provider has to
* be included for reflection on GWT.
*
* @author MJ */
public class ReflectionObjectProvider<Type> implements ObjectProvider<Type> {
private final Class<Type> type;
/** @param type will be the type of objects constructed by the provider. Note that the class has to have a public,
* no-argument constructor. */
public ReflectionObjectProvider(final Class<Type> type) {
this.type = type;
}
/** @return a new ReflectionObjectProvider creating new instances of object of the given class. */
public static <Type> ObjectProvider<Type> forClass(final Class<Type> type) {
return new ReflectionObjectProvider<Type>(type);
}
@Override
public Type provide() {
try {
return ClassReflection.newInstance(type);
} catch (final ReflectionException exception) {
throw new GdxRuntimeException("Unable to provide object.", exception);
}
}
}