Java syntax like "DefaultEdge.class" is (more or less) just syntactic sugar for 'java.lang.Class.forName("org.jgrapht.graph.DefaultEdge");' which in Jess will come out like "(Class.forName org.jgrapht.graph.DefaultEdge)" (taking advantage of the default static imports from the java.lang package.) So you want to do something like
(bind ?edge-class (Class.forName org.jgrapht.graph.DefaultEdge)) (bind ?graph (new org.jgrapht.graph.DefaultDirectedGraph ?edge-class)) From: owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] On Behalf Of Aurélien Mazurie Sent: Wednesday, August 07, 2013 7:11 PM To: jess-users Subject: JESS: [EXTERNAL] Issue with static methods (or generics?) Dear Jess users, I am having trouble instantiating a Java class from within a rule's RHS, and cannot figure out how to solve this problem. The code in my RHS creates an instance of a class from the JGraphT library. As seen in https://github.com/jgrapht/jgrapht/blob/master/jgrapht-demo/src/main/java/org/jgrapht/demo/HelloJGraphT.java (lines 91-92), the creation of a DefaultDirectedGraph instance require another class as argument; here, DefaultEdge. I couldn't find an example in the Jess documentation about how to do that. For example, I tried the following: (bind ?edge-class org.jgrapht.graph.DefaultEdge) (bind ?graph (new org.jgrapht.graph.DefaultDirectedGraph ?edge-class)) I also tried variations such as (bind ?edge-class org.jgrapht.graph.DefaultEdge) (bind ?graph (new org.jgrapht.graph.DefaultDirectedGraph (?edge-class getClass)) or (bind ?edge-class (new org.jgrapht.graph.DefaultEdge)) (bind ?graph (new org.jgrapht.graph.DefaultDirectedGraph ?edge-class)) Any idea about what the syntax should be to properly instantiate the DefaultDirectedGraph class? For information (but not certain how relevant it is here), I succeeded in the past in using java.util.regex.Pattern and its static method 'compile' by typing (bind ?pattern-class java.util.regex.Pattern) (bind ?matches ((?pattern-class compile "...") matcher ?string)) Best, Aurélien