FileDocCategorySizeDatePackage
AppendConverter.javaAPI DocExample2216Mon Apr 03 15:48:20 BST 2000tuning.stringconvert

AppendConverter.java

package tuning.stringconvert;

/**
 * For classes you do not control the source code for, you need to implement
 * an AppendConverter class, and register it with the AppenderHelper if you
 * want to have efficient appending of the string representation of objects
 * in that class. This is most easily demonstrated with an example. The following would
 * be an AppendConverter implementation for the java.util.Vector (not actually
 * needed as this is already handled by the AppenderHelper).
 * <pre>
 * import java.util.Vector;
 * import jack.basics.AppenderHelper;
 * 
 * public class VectorAppender implements AppendConverter
 * {
 *   private static final char[] COMMA_SPACE = {',',' '};
 *   static {AppenderHelper.putInAppendMap(new VectorAppender(),"java.util.Vector");}
 *   public void appendObj(AppenderHelper h, StringBuffer s, Object o, int depth)
 *   {
 * 			if (depth <= 0)
 *				AppenderHelper.appendDepth0To(s,o);
 *			else
 *			{
 *				depth--;
 *				int size = o.size();
 *				s.append('[');
 *				if (size != 0)
 *				{
 *					h.append(s, o.elementAt(0), depth);
 *					for (int i = 1; i < size; i++)
 *					{
 *						s.append(COMMA_SPACE);
 *						h.append(s, o.elementAt(i), depth);
 *					}
 *				}
 *				s.append(']');
 * 			}
 *		}
 * }
 * </pre>
 * Note that unfortunately the AppenderHelper relies on the class of objects
 * passed to determine the converter object to use, and this does not carry
 * over to subclasses of that class if the object is passed in as type Object.
 * Objects of classes that are not registered
 * have their append call defaulted to the default StringBuffer append, so the
 * string representation will always be correct, but not necessarily the most
 * efficient append. For example, if there is a subclass of java.util.Vector
 * that you want to use the above example for, you should register that separately.
 */
public interface AppendConverter
{

/**
 * This method was created by a SmartGuide.
 * @param h jack.basics.Appender
 * @param s java.lang.StringBuffer
 * @param o java.lang.Object
 * @param depth int
 */
public void appendObj(AppenderHelper h, StringBuffer s, Object o, int depth);
}