Delphi is like an England Queen Guard. It does not like ambiguity and may even kill to protect the hard code. But Java is almost a street corner woman. When I use this is java:
Button button = new Button();
String a = "This is a " + button;
I get This is a button
But if I do that in Delphi:
ShowMessage('This is a ' + Button1);
I get an error, because Delphi has toString()
method (now) but it does not implicitly calls it. Because literal strings are not objects in OP. The correct use is:
ShowMessage('This is a ' + Button1.toString());
Is there any way to override this behave so it works like Java?
For reference: How an object will call toString method implicitly?
There's no way to enforce an implicit cast or method call on an object instance.
If this was a record that you controlled then you could implement an Implicit
class operator that would perform a cast to string
.
The issue discussed link that you refer to is simply an implementation detail of PrintStream.println()
. That relies on the ability of String.valueOf()
to come up with a string representation for any object which in turn relies on Object.toString()
. In fact the discussion there concerning println()
is unrelated to the way the +
operator in Java works which is the pertinent issue in your question.
Delphi's TObject
has a virtual ToString
method that could be used to perform the same purpose. So it would be easy enough to use the exact same technique as PrintStream.println()
in Delphi code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With