Oh, mais c'est moche, du code non orienté objet. Dès que vous voyez "if/else" et "typeof", vous devriez penser à la polymorphie. C'est la mauvaise voie à suivre. Je pense que les génériques sont vos amis ici.
Combien de types prévoyez-vous de traiter?
UPDATE:
Si vous parlez uniquement de String et int, voici une façon de le faire. Commencez par l'interface XmlGenerator (assez avec "foo"):
package generics;
public interface XmlGenerator
{
String getXml(T value);
}
Et l'implémentation concrète XmlGeneratorImpl:
package generics;
public class XmlGeneratorImpl implements XmlGenerator
{
private Class valueType;
private static final int DEFAULT_CAPACITY = 1024;
public static void main(String [] args)
{
Integer x = 42;
String y = "foobar";
XmlGenerator intXmlGenerator = new XmlGeneratorImpl(Integer.class);
XmlGenerator stringXmlGenerator = new XmlGeneratorImpl(String.class);
System.out.println("integer: " + intXmlGenerator.getXml(x));
System.out.println("string : " + stringXmlGenerator.getXml(y));
}
public XmlGeneratorImpl(Class clazz)
{
this.valueType = clazz;
}
public String getXml(T value)
{
StringBuilder builder = new StringBuilder(DEFAULT_CAPACITY);
appendTag(builder);
builder.append(value);
appendTag(builder, false);
return builder.toString();
}
private void appendTag(StringBuilder builder) { this.appendTag(builder, false); }
private void appendTag(StringBuilder builder, boolean isClosing)
{
String valueTypeName = valueType.getName();
builder.append("<").append(valueTypeName);
if (isClosing)
{
builder.append("/");
}
builder.append(">");
}
}
Si je lance ceci, j'obtiens le résultat suivant:
integer: 42
string : foobar
Je ne sais pas si c'est ce que vous aviez en tête.