package com.github.czyzby.uedi.stereotype.impl;
import java.lang.reflect.Member;
import com.github.czyzby.uedi.stereotype.Default;
import com.github.czyzby.uedi.stereotype.Named;
/** Always provides the same object.
*
* @author MJ
*
* @param <Type> type of singleton instance. */
public class SingletonProvider<Type> implements DelegateProvider<Type>, Named {
private final Type instance;
private final Class<Type> type;
private final String name;
private final boolean isDefault;
/** @param instance will always be provided. */
@SuppressWarnings("unchecked")
public SingletonProvider(final Type instance) {
this.instance = instance;
type = (Class<Type>) instance.getClass();
name = Providers.getName(instance);
isDefault = instance instanceof Default;
}
@Override
public boolean isDefault() {
return isDefault;
}
@Override
public Object getWrappedObject() {
return instance;
}
@Override
public String getName() {
return name;
}
@Override
public Class<? extends Type> getType() {
return type;
}
@Override
public Type provide(final Object target, final Member member) {
return instance;
}
}