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 />}