package net.varkhan.base.functor.mapper;
import net.varkhan.base.functor.Mapper;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 4/7/12
* @time 5:48 PM
*/
public class ConstMapper<R,A,C> implements Mapper<R,A,C> {
protected final R val;
public ConstMapper(R val) { this.val=val; }
public R invoke(A arg, C ctx) { return val; }
protected static final ConstMapper<Object,Object,Object> NULL = new ConstMapper<Object,Object,Object>(null);
@SuppressWarnings({ "unchecked" })
public static <R,A,C> Mapper<R,A,C> NULL() { return (Mapper) NULL;}
public static <R,A,C> Mapper<R,A,C> as(R val) { return new ConstMapper<R,A,C>(val);}
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
if(val==null) buf.append('\u2205');
else buf.append('(').append(val.toString()).append(')');
return buf.toString();
}
}