Yeah... I actually wanted to avoid that - I don't really want to (publically) 'expose' them. It means I have to expose all arity-overloaded methods I want to use, and in some libraries, there are quite a lot of these. It just feels a bit weird to publically expose (protected) methods of superclasses - well, we're using classes here, so I do think in inheritance-based oop for this example.
Anyway, exposing is probably how to do it... thanks, qsys Op maandag 28 december 2015 04:22:36 UTC+1 schreef James Elliott: > > I don’t have a ton of experience with gen-class, but I think you need to > tell it to expose the superclass methods you want to call using > :exposes-methods, as described in > http://stackoverflow.com/questions/9060127/how-to-invoke-superclass-method-in-a-clojure-gen-class-method > > In case it is of any use, here is an example of where I successfully > subclassed a Java class from an external library and called some superclass > methods: > https://github.com/brunchboy/afterglow-max/blob/master/src/afterglow/max/Var.clj > > On Wednesday, December 23, 2015 at 3:23:41 AM UTC-6, Kurt Sys wrote: >> >> When using gen-class and arity-overloaded methods of a superclass seems >> not very obvious, or I am missing something... >> >> 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: '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. 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.namespace.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... >> (and the method keeps on calling itself). >> >> The question: how do I override only 1 method of an arity-overloaded >> method of a superclass in Clojure (using gen-class to generate a Java >> class)? >> > -- 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.