From: EXT-Harris, S. H <Sco...@bo...> - 2011-10-09 16:49:10
|
Answering my own post: ---- from the SWIG interfacd file ... // this line added "implements Comparable<X>" to the Java class declaration %typemap(javainterfaces) SWIGTYPE "Comparable<X>" class IRTime { public: ... Change the generated Java class from: class IRTime { to class IRTime implements Comparable<X> What is a bit confusing is that the SWIG documentation says: %typemap(javainterfaces) interfaces (extends) for Java class: empty default but using '%typemap(javainterfaces) SWIGTYPE "Comparable<X>"' results in "implements Name" instead of "extends Name". Should the "(extends)" be replaced with "(implements)" or is SWIG figuring out that Comparable is an interface (not a class) and hence it would insert "implements" vs "extends"? Regards, Scott From: EXT-Harris, Scott H Sent: Saturday, October 08, 2011 5:10 PM To: swi...@li... Cc: EXT-Harris, Scott H Subject: Java class implements Comparable<ClssName> Hi, How can I get SWIG to generate a java class that "implements Comparable"? Let's say I have a C++ class X and an SWIG interface X that generates a compareTo(X rhs) method. If I use the Java class generated by SWIG in a TreeMap then the second put will throw this exception: CREATION exception: java.lang.ClassCastException: com.myCompany.project.X in exception handler got exception: java.lang.NullPointerException But if I modify the generated X.java file from public class X { to public class X implements Comparable<X> { then the exception is not thrown and the compareTo function is used as expected. Can I get SWIG to add "implements Comparable<X> to the class? FYI: For example of the test code: X first = new X(1); X last = new X(9); TreeMap<X, String>mm = new TreeMap<X, String>(); String old = mm.put(last, "last"); // this next line throws the exeption old = mm.put(first, "first"); Thanks, Scott |