When using gen-class and arity-overloaded methods of a superclass seems not 
very obvious, or I am missing something :p.

There's a (java) superclass 'some.Superclass' (which is from a library, so 
I can't change this one):

public abstract class Superclass {
   public void method() {
   }

   public void method(Object something) {
      this.method();
      // other logic
   }
}


I want to extend that base (abstract) class in clojure, using gen-class 
(since the class needs to accessible as a normal Java class). So the first 
thing I did was:

(ns my.namespace
  (:gen-class
   :name "my.namespace.ArityTest"
   :extends some.Superclass
   :prefix "some-")
 )

(defn some-method
  [this]
  (println "1-arity"))


However, this doesn't work: since 'method' is arity-overloaded, when 
calling 
new ArityTest().method(new Object())

I get a ArityException, wrong number of arguments (2).

I suppose this is because I override 'method', so I have to override all 
arities. I'd like to have the 1-arity version to call it's superclass 
method, and I seem to fail at that one. The last attempt is this: get the 
method of the superclass and call that method on 'this':
(ns be.admb.kbf.vertx.shell.test
    (:gen-class
      :name "my.namexpace.ArityTest
      :extends some.Superclass
      :prefix "some-")
    )


(defn some-method
      ([this]
        (println "1-arity"))
      ([this o]
        (.invoke (-> this
                     (.getClass)
                     (.getSuperclass)
                     (.getMethod "method"
                                 (into-array Class [java.lang.Object])))
                 this (into-array Object [o]))
        ))


This fails: it calls the overriden method, not the superclass' method...

So well, how do I override only 1 method of an arity-overloaded method of a 
superclass in Clojure?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to