Re: [jruby-user] java_send with a CharSequence not working

Christian MICHON <[email protected]> Tue, 28 Apr 2015 23:48:23 +0200
Newsgroups gmane.comp.lang.jruby.user
Message-ID <CACx2yF_dRq2HMvVMo-3=Bp=hiRq-sxVHwWsbOd0n--OAZiqJqg@mail.gmail.com>
--089e01229704621c550514cfd2f5
Content-Type: text/plain; charset=UTF-8

I read this line
  a.java_send :append, [java.lang.String], "I am Here\n"
as equivalent to
  a.append(java.lang.String.new("I am Here\n"))

Why use java_send in the first place?

So using [java.lang.String] means more or less a creation of a new java
String or casting from ruby String into java String.

But java.lang.CharSequence is an interface... not a java type. I doubt you
can cast into it... Verification below

java.lang.CharSequence.new('boo')
        from org/jruby/java/proxies/JavaInterfaceTemplate.java:393:in `new'
        from (irb):16:in `evaluate'
        from org/jruby/RubyKernel.java:1112:in `eval'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:158:in `eval_input'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:271:in `signal_status'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:155:in `eval_input'
        from org/jruby/RubyKernel.java:1439:in `loop'
        from org/jruby/RubyKernel.java:1212:in `catch'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:154:in `eval_input'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:71:in `start'
        from org/jruby/RubyKernel.java:1212:in `catch'
        from C:/dev/rb/lib/ruby/1.8/irb.rb:70:in `start'
        from C:\dev\rb\bin\jirb:13:in `(root)'

Could you please show in plain java what you're trying to achieve with
CharSequence?

On Tue, Apr 28, 2015 at 12:21 AM, Cris Shupp <[email protected]> wrote:

> Consider the following in irb:
>
> *************
> a = java.lang.StringBuilder.new
> a.java_send :append, [java.lang.String], "I am Here\n"
> puts a
> ***************
>
> yields "I am Here", as expected.
>
> *************
> a.java_send :append, [java.lang.CharSequence], "I am not here!\n"
> a.java_send :append, [java.lang.CharSequence], "I am not
> here!\n".to_java
> *************
>
> both yield
>
> TypeError: cannot convert instance of class org.jruby.RubyModule to
> class               java.lang.Class
>         from org/jruby/java/proxies/JavaProxy.java:347:in `java_send'
>         from (irb):76:in `evaluate'
>         from org/jruby/RubyKernel.java:1107:in `eval'
>         from org/jruby/RubyKernel.java:1507:in `loop'
>         from org/jruby/RubyKernel.java:1270:in `catch'
>         from org/jruby/RubyKernel.java:1270:in `catch'
>         from C:/jruby-1.7.18/bin/jirb:13:in `(root)'
>
> Lets get extreme and open Ruby's String as follows:
>
> ***************
> class String
>   include java.lang.CharSequence
>
>   def charAt(index)
>     self.to_java.charAt(index)
>   end
>
>   def length
>     self.to_java.length
>   end
>
>   def subSequence(start, endPoint)
>     self.to_java.subSequence(start, endPoint)
>   end
>
>   def toString
>     self.to_java.toString()
>   end
>
> end
> ***************
>
> The code "SomeString".toString behaves as expected now, but:
>
> ************
>  a.java_send :append, [java.lang.CharSequence], "Some String"
> ************
>
> TypeError: cannot convert instance of class org.jruby.RubyModule to
> class java.lang.Class
>         from org/jruby/java/proxies/JavaProxy.java:347:in `java_send'
>         from (irb):81:in `evaluate'
>         from org/jruby/RubyKernel.java:1107:in `eval'
>         from org/jruby/RubyKernel.java:1507:in `loop'
>         from org/jruby/RubyKernel.java:1270:in `catch'
>         from org/jruby/RubyKernel.java:1270:in `catch'
>         from C:/jruby-1.7.18/bin/jirb:13:in `(root)'
>
> Still fails :-(
>
> --
> Posted via http://www.ruby-forum.com/.
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>
>


-- 
Christian

--089e01229704621c550514cfd2f5
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">I read this line<div><span style=3D"font-size:12.800000190=
7349px">=C2=A0 a.java_send :append, [java.lang.String], &quot;I am Here\n&q=
uot;</span><br></div><div><span style=3D"font-size:12.8000001907349px">as e=
quivalent to</span></div><div><span style=3D"font-size:12.8000001907349px">=
=C2=A0 a.append(java.lang.String.new(</span><span style=3D"font-size:12.800=
0001907349px">&quot;I am Here\n&quot;</span><span style=3D"font-size:12.800=
0001907349px">))</span></div><div><span style=3D"font-size:12.8000001907349=
px"><br></span></div><div><span style=3D"font-size:12.8000001907349px">Why =
use java_send in the first place?</span></div><div><span style=3D"font-size=
:12.8000001907349px"><br></span></div><div><span style=3D"font-size:12.8000=
001907349px">So using [</span><span style=3D"font-size:12.8000001907349px">=
java.lang.String</span><span style=3D"font-size:12.8000001907349px">] means=
 more or less a creation of a new java String or casting from ruby String i=
nto java String.</span></div><div><span style=3D"font-size:12.8000001907349=
px"><br></span></div><div><span style=3D"font-size:12.8000001907349px">But=
=C2=A0</span><span style=3D"font-size:12.8000001907349px">java.lang.CharSeq=
uence is an interface... not a java type. I doubt you can cast into it... V=
erification below</span></div><div><span style=3D"font-size:12.800000190734=
9px"><br></span></div><div><span style=3D"font-size:12.8000001907349px">jav=
a.lang.CharSequence.new(&#39;boo&#39;)</span><br></div><div><div style><spa=
n style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0 from o=
rg/jruby/java/proxies/JavaInterfaceTemplate.java:393:in `new&#39;</span></d=
iv><div style><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 from (irb):16:in `evaluate&#39;</span></div><div style><span =
style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org=
/jruby/RubyKernel.java:1112:in `eval&#39;</span></div><div style><span styl=
e=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0 from C:/dev/=
rb/lib/ruby/1.8/irb.rb:158:in `eval_input&#39;</span></div><div style><span=
 style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0 from C:=
/dev/rb/lib/ruby/1.8/irb.rb:271:in `signal_status&#39;</span></div><div sty=
le><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 from C:/dev/rb/lib/ruby/1.8/irb.rb:155:in `eval_input&#39;</span></div><di=
v style><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 from org/jruby/RubyKernel.java:1439:in `loop&#39;</span></div><div s=
tyle><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 from org/jruby/RubyKernel.java:1212:in `catch&#39;</span></div><div sty=
le><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 from C:/dev/rb/lib/ruby/1.8/irb.rb:154:in `eval_input&#39;</span></div><di=
v style><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 from C:/dev/rb/lib/ruby/1.8/irb.rb:71:in `start&#39;</span></div><di=
v style><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 from org/jruby/RubyKernel.java:1212:in `catch&#39;</span></div><div =
style><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 from C:/dev/rb/lib/ruby/1.8/irb.rb:70:in `start&#39;</span></div><div s=
tyle><span style=3D"font-size:12.8000001907349px">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 from C:\dev\rb\bin\jirb:13:in `(root)&#39;</span></div></div><div style=
><span style=3D"font-size:12.8000001907349px"><br></span></div><div style><=
span style=3D"font-size:12.8000001907349px">Could you please show in plain =
java what you&#39;re trying to achieve with CharSequence?</span></div></div=
><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">On Tue, Apr 28, =
2015 at 12:21 AM, Cris Shupp <span dir=3D"ltr">&lt;<a href=3D"mailto:lists@=
ruby-forum.com" target=3D"_blank">[email protected]</a>&gt;</span> wrote=
:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex">Consider the following in irb:<br>
<br>
*************<br>
a =3D java.lang.StringBuilder.new<br>
a.java_send :append, [java.lang.String], &quot;I am Here\n&quot;<br>
puts a<br>
***************<br>
<br>
yields &quot;I am Here&quot;, as expected.<br>
<br>
*************<br>
a.java_send :append, [java.lang.CharSequence], &quot;I am not here!\n&quot;=
<br>
a.java_send :append, [java.lang.CharSequence], &quot;I am not<br>
here!\n&quot;.to_java<br>
*************<br>
<br>
both yield<br>
<br>
TypeError: cannot convert instance of class org.jruby.RubyModule to<br>
class=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0java.lang.Class=
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/java/proxies/JavaProxy.java:347:=
in `java_send&#39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from (irb):76:in `evaluate&#39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1107:in `eval&#3=
9;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1507:in `loop&#3=
9;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1270:in `catch&#=
39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1270:in `catch&#=
39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from C:/jruby-1.7.18/bin/jirb:13:in `(root)&#39=
;<br>
<br>
Lets get extreme and open Ruby&#39;s String as follows:<br>
<br>
***************<br>
class String<br>
=C2=A0 include java.lang.CharSequence<br>
<br>
=C2=A0 def charAt(index)<br>
=C2=A0 =C2=A0 self.to_java.charAt(index)<br>
=C2=A0 end<br>
<br>
=C2=A0 def length<br>
=C2=A0 =C2=A0 self.to_java.length<br>
=C2=A0 end<br>
<br>
=C2=A0 def subSequence(start, endPoint)<br>
=C2=A0 =C2=A0 self.to_java.subSequence(start, endPoint)<br>
=C2=A0 end<br>
<br>
=C2=A0 def toString<br>
=C2=A0 =C2=A0 self.to_java.toString()<br>
=C2=A0 end<br>
<br>
end<br>
***************<br>
<br>
The code &quot;SomeString&quot;.toString behaves as expected now, but:<br>
<br>
************<br>
=C2=A0a.java_send :append, [java.lang.CharSequence], &quot;Some String&quot=
;<br>
************<br>
<br>
TypeError: cannot convert instance of class org.jruby.RubyModule to<br>
class java.lang.Class<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/java/proxies/JavaProxy.java:347:=
in `java_send&#39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from (irb):81:in `evaluate&#39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1107:in `eval&#3=
9;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1507:in `loop&#3=
9;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1270:in `catch&#=
39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from org/jruby/RubyKernel.java:1270:in `catch&#=
39;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 from C:/jruby-1.7.18/bin/jirb:13:in `(root)&#39=
;<br>
<br>
Still fails :-(<br>
<span class=3D"HOEnZb"><font color=3D"#888888"><br>
--<br>
Posted via <a href=3D"http://www.ruby-forum.com/" target=3D"_blank">http://=
www.ruby-forum.com/</a>.<br>
<br>
---------------------------------------------------------------------<br>
To unsubscribe from this list, please visit:<br>
<br>
=C2=A0 =C2=A0 <a href=3D"http://xircles.codehaus.org/manage_email" target=
=3D"_blank">http://xircles.codehaus.org/manage_email</a><br>
<br>
<br>
</font></span></blockquote></div><br><br clear=3D"all"><div><br></div>-- <b=
r><div class=3D"gmail_signature">Christian<br></div>
</div>

--089e01229704621c550514cfd2f5--