javafx.application.Launcher/launch requires that a class be passed.
From clojure's point of view (I'm working on some bindings) this is
a bad thing. It requires ahead of time (AOT) compilation using clojure's
gen-class facility. AOT is avoided at all costs in clojure because the
language is still rapidly evolving and using it in libraries tends to create
breaking binary incompatibilities, and because it is unidiomatic
and generally painful to do so at the user level.
Much better would be requiring an instance of an interface, something like
ApplicationActions or ApplicationDelegate providing the start, stop, delete and init
methods. It could be passed to the Launcher and delegated to by the Application
object which would be created behind the scenes. Providing an interface would
allow for use of clojure's new datatype/reify facilities which can be derived from java
Second best, but better than the present situation would be to have a delegate
class and to require the pasing of an instance of a subclass of that class rather
than of Application itself.
Another cool idea which would play well with clojure's functons (which implement
runnable & callable), would be to add an overloaded launch method which takes
a single callable, and builds an ApplicationDelegate whose start method calls the
callable. As I understand it this would also work well with JSR 335's lambdas, and
would be great for quickly whipping up quick tests apps in any JVM language.