I have a basic Java interface defined as follows:

```java
public interface Action {
    void execute(Metadata var1, Parameter var2);
}

```

I'm trying to extend it in Clojure but keep getting errors. After importing the class into my namespace, I've tried using `reify` as follows:

```clj
(defn action [action-fn]
  (reify Action
    (execute [metadata parameter] (action-fn metadata parameter))))

```

but that throws a compiler illegal argument exception:

```
CompilerException java.lang.IllegalArgumentException: Can't define method not in interfaces: execute

```

Next I tried using `proxy`

```clj
(defn action [action-fn]
  (proxy [Action] []
    (execute [metadata parameter] (action-fn metadata parameter))))

```

That compiles successfully, and my editor (IntelliJ + Cursive) navigates to the interface definition via a border decoration, but trying to invoke execute on a generate proxy fails:

```clj
(.execute (action (fn [_ _] "Test action")))

```

throws the following:

```
IllegalArgumentException No matching field found: execute for class

```

Finally I tried using deftype as follows:

```
(deftype cljAction [action-fn]
  Action
  (execute [metadata parameter] (action-fn metadata parameter)))

```

which throws the same compiler error as for `reify`, e.g:

```
CompilerException java.lang.IllegalArgumentException: Can't define method not in interfaces: execute

```

Trawling through various blog posts and SO answers seems to suggest it's a problem with the arity of arguments, but I'm not sure how to resolve it. What am I doing wrong??