September 3rd, 2009
Quick Tip: Override toString();
Sometimes when making custom classes a trace of an object just isn’t enough information. For instance, if I had a custom person class, a trace would probably look something like [Object Person]. A quick and easy solution is to override the objects toString() method to provide a more detailed explanation. As with all good things though, use it in moderation. There is no need for each class to spill it’s guts in a simple trace. Sometimes a movieclip should just be a movieclip.
Here’s some code!
package { <br /> import flash.display.Sprite; <br /> public class Main extends Sprite { <br /> <br /> public function Main() { <br /> var p:Person = new Person("Charlie"); <br /> var pp:PersonPicture = new PersonPicture("Charlie.jpg"); <br /> trace(p); // [Person Charlie] <br /> trace(pp); // [PersonPicture Charlie.jpg] <br /> }; <br /> } <br />} <br /> <br />/** <br /> * class Person <br /> * Even though it's not written, Person extends the "Object" class by default. <br /> * Though a toString function exists for Objects, we don't need to override here. Just declaring it is enough. <br /> */ <br />final class Person { <br /> private var _name:String; <br /> <br /> public function Person($name:String) { <br /> _name = $name; <br /> }; <br /> <br /> public function toString():String { <br /> return "[Person "+_name+"]"; <br /> }; <br />} <br /> <br />/** <br /> * class PersonPicture <br /> * In the case of Sprites (and most other classes) we actually need to explicitly override the function. <br /> */ <br />import flash.display.Sprite; <br />final class PersonPicture extends Sprite { <br /> private var _url:String; <br /> <br /> public function PersonPicture($url:String) { <br /> _url = $url; <br /> }; <br /> <br /> override public function toString():String { <br /> return "[PersonPicture "+_url+"]"; <br /> }; <br />}
