Procházet zdrojové kódy

AnyFunction # unbinded
MethodPointer - poprawiono semantykę na immutable (bind zwraca nowy obiekt)

Ranides Atterwim před 13 roky
rodič
revize
24c122010f

+ 8 - 2
src/main/java/net/ranides/assira/generic/AnyFunction.java

@@ -59,10 +59,16 @@ public abstract class AnyFunction<R> implements Function<R, Object[]> {
         throw new UnsupportedOperationException("Bind is not supported by: " + getClass().getName());
     }
     
+    /**
+     * Czy funkcja wymaga bindowania (lub przekazania w argumentach) {@code this}.
+     * @return 
+     */
+    public boolean unbinded() {
+        return false;
+    }
+
     public boolean matches(Object... arguments) {
         return true;
     }
-    
-    // @todo (ranides) vcall(that, arguments...) 
 
 }

+ 8 - 4
src/main/java/net/ranides/assira/reflection/MethodPointer.java

@@ -15,7 +15,7 @@ import net.ranides.assira.generic.AnyFunction;
  */
 public final class MethodPointer<T> extends AnyFunction<T> {
     
-    private Object object;
+    private final Object object;
     private final Method pointer;
 
     private MethodPointer(Object object, Method method) {
@@ -28,11 +28,15 @@ public final class MethodPointer<T> extends AnyFunction<T> {
     public T apply(Object[] arguments) {
         return (T)Invoker.invoke(object, pointer, arguments);
     }
-
+    
     @Override
     public MethodPointer<T> bind(Object that) {
-        this.object = that;
-        return this;
+        return new MethodPointer<T>(object, pointer);
+    }
+
+    @Override
+    public boolean unbinded() {
+        return null==object && !MemberUtils.isStatic(pointer);
     }
     
     @Override