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
-~----------~----~----~----~------~----~------~--~---

Reply via email to