jython and toString

I

ivansh

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:
jythontest.Hello@523ca2 // GOOD
jythontest.Hello@523ca2 // 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)
 
J

Jon Clements

ivansh said:
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:
jythontest.Hello@523ca2 // GOOD
jythontest.Hello@523ca2 // 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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,052
Latest member
KetoBeez

Latest Threads

Top