Re: jython and toString

2006-10-16 Thread Jon Clements

ivansh wrote:

 Hello,

 For one java class (Hello) i use another (HelloPrinter) to build the
 string representation of the first one. When i've tried to use this
 from within jython,  HelloPrinter.toString(hello) call gives results
 like Object.toString() of hello has being called. The example below
 shows this behaviour.
 Could somebody explain this?


 // Hello.java
 package jythontest;
 public class Hello {
   private String name;
   public Hello(String name)
   {
   this.name = name;
   }
   public String sayHello()
   {
   return Hello, +name;
   }
 }

 // HelloPrinter.java
 package jythontest;
 public class HelloPrinter {
   public static String toString(Hello h)
   {
   return h.sayHello();
   }

   public static String toMyString(Hello h)
   {
   return h.sayHello();
   }
 }



 #  calljava.py
 from jythontest import *
 h = Hello(theName)
 print h
 print HelloPrinter.toString(h)
 print HelloPrinter.toMyString(h)

 OUTPUT:
 [EMAIL PROTECTED]   // GOOD
 [EMAIL PROTECTED]   // WRONG
 Hello, theName // GOOD


 Jython 2.1 on java (JIT: null)

 java version 1.5.0_03
 Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07)
 Java HotSpot(TM) Server VM (build 1.5.0_03-b07, mixed mode)


I'm guessing your toString(Hello h) is never being called because
there's another toString(something) behind the scenes that's being
preferred. I could be well wrong, but I'm guessing toString isn't meant
to be static, and when you create an object in Java they inherit from
object which defines a default toString. It might be a temporary object
of type HelloPrinter is created in the call to print
HelloPrinter.toString(h), and the method you end up calling is the
toString for that temporary (not your static one). This would
especially make sense if there's a version of toString which takes an
object, and returns its toString result...

I'm basing this purely on the fact PrintHello.toMyString() works... so
take with a pinch of salt.

Jon.

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: jython and toString

2006-10-16 Thread Walter S. Leipold
toString() isn't supposed to be a static method.  When you call
x.toString(), you're accessing x's non-static version of toString(), which
is inherited from Object. 

-- Walt


ivansh ([EMAIL PROTECTED]) wrote:
 For one java class (Hello) i use another (HelloPrinter) to build the
 string representation of the first one. When i've tried to use this
 from within jython,  HelloPrinter.toString(hello) call gives results
 like Object.toString() of hello has being called. The example below
 shows this behaviour.
 Could somebody explain this?
 
 // Hello.java
 package jythontest;
 public class Hello {
   private String name;
   public Hello(String name)
   {
   this.name = name;
   }
   public String sayHello()
   {
   return Hello, +name;
   }
 }
 
 // HelloPrinter.java
 package jythontest;
 public class HelloPrinter {
   public static String toString(Hello h)
   {
   return h.sayHello();
   }
 
   public static String toMyString(Hello h)
   {
   return h.sayHello();
   }
 }
 
 #  calljava.py
 from jythontest import *
 h = Hello(theName)
 print h
 print HelloPrinter.toString(h)
 print HelloPrinter.toMyString(h)
 
 OUTPUT:
 [EMAIL PROTECTED]   // GOOD
 [EMAIL PROTECTED]   // WRONG
 Hello, theName // GOOD
 
 
 Jython 2.1 on java (JIT: null)
 
 java version 1.5.0_03
 Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07)
 Java HotSpot(TM) Server VM (build 1.5.0_03-b07, mixed mode)
 
 -- 
 http://mail.python.org/mailman/listinfo/python-list
 
-- 
http://mail.python.org/mailman/listinfo/python-list