Wow, you really got to the bottom of this. Reading your post, it all makes sense, but it leads me to wonder why StringBuilder was designed in such a fashion and why the docs would go so far as to lie about it. Either way, thanks for taking the time to help me out. This community is a big part of what makes working with Clojure so awesome.
Travis On Jun 14, 6:58 pm, "Stephen C. Gilardi" <squee...@mac.com> wrote: > On Jun 13, 2009, at 10:46 PM, Stephen C. Gilardi wrote: > > > user=> (.setCharAt s 0 \c) > > java.lang.IllegalArgumentException: Can't call public method of non- > > public class: public void > > java.lang.AbstractStringBuilder.setCharAt(int,char) (NO_SOURCE_FILE:0) > > > I'm not sure why. > > StringBuilder extends AbstractStringBuilder (though the JavaDoc docs > lie and say it extends Object). AbstractStringBuilder has default > accessibility (not public, protected, or private) which makes the > class inaccessible to code outside the java.lang package. > > In both Java SE 5 and Java SE 6, StringBuilder does not contain > a .setCharAt method definition. It relies on the inherited public > method in AbstractStringBuilder. (I downloaded the source code for > both versions from Sun to check.) > > In Java SE 5, when Clojure checks whether or not .setCharAt on > StringBuilder is public, it finds that it's a public method of a non- > public base class and throws the exception you saw. (It looks like > you're using a version of Clojure older than 18 May 2009 (Clojure svn > r1371). Versions later than that print the more detailed message I saw.) > > In Java SE 6, Clojure's checks for accessibility of this method > succeed and the method call works. > > I'm not sure whether or not Clojure could be modified to make this > method call work in Java 5. Google searches turn up discussion that > this pattern of using an undocumented abstract superclass with non- > public accessibility is not common in the JDK. > > --Steve > > smime.p7s > 3KViewDownload --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---