@@ -0,0 +1,1128 @@
+package guangyin.internal.types;%0A%0Aimport clojure.lang.AFn;%0A%0Apublic abstract class FnObjectWrapper extends AFn implements IWrapper %7B%0A    private Object wrapped;%0A%0A    public FnObjectWrapper(Object wrapped) %7B%0A        if (wrapped == null) %7B%0A            throw new IllegalArgumentException(%22Wrapped object cannot be null%22);%0A        %7D%0A        this.wrapped = wrapped;%0A    %7D%0A%0A    public boolean equals(Object obj) %7B%0A        // Unwrap the wrapped object for check if needed%0A        if (obj instanceof ObjectWrapper) %7B%0A            obj = ((ObjectWrapper) obj).deref();%0A        %7D%0A        return this.wrapped.equals(obj);%0A    %7D%0A%0A    public int hashCode() %7B%0A        return this.wrapped.hashCode();%0A    %7D%0A%0A    public String toString() %7B%0A        return this.wrapped.toString();%0A    %7D%0A%0A    @SuppressWarnings(%22unchecked%22)%0A    public int compareTo(Object o) %7B%0A        // Unwrap the wrapped object for comparison if needed%0A        if (o instanceof ObjectWrapper) %7B%0A            o = ((ObjectWrapper) o).deref();%0A        %7D%0A        return ((Comparable) this.wrapped).compareTo(o);%0A    %7D%0A%0A    public Object deref() %7B%0A        return this.wrapped;%0A    %7D%0A%7D%0A

Add FnObjectWrapper class, can be used to create wrappers that are functions.