오, 그러나 그것은 추악하고 객체 지향적이지 않은 코드입니다. "if / else"및 "typeof"를 보는 순간 다형성을 생각해야합니다. 이것은 잘못된 길입니다. 제네릭은 여기서 당신의 친구라고 생각합니다.
얼마나 많은 유형을 다룰 계획입니까?
최신 정보:
String과 int에 대해 이야기하고 있다면 여기에 할 수있는 한 가지 방법이 있습니다. XmlGenerator 인터페이스로 시작합니다 ( "foo"로 충분 함).
package generics;
public interface XmlGenerator<T>
{
String getXml(T value);
}
그리고 구체적인 구현 XmlGeneratorImpl :
package generics;
public class XmlGeneratorImpl<T> implements XmlGenerator<T>
{
private Class<T> valueType;
private static final int DEFAULT_CAPACITY = 1024;
public static void main(String [] args)
{
Integer x = 42;
String y = "foobar";
XmlGenerator<Integer> intXmlGenerator = new XmlGeneratorImpl<Integer>(Integer.class);
XmlGenerator<String> stringXmlGenerator = new XmlGeneratorImpl<String>(String.class);
System.out.println("integer: " + intXmlGenerator.getXml(x));
System.out.println("string : " + stringXmlGenerator.getXml(y));
}
public XmlGeneratorImpl(Class<T> 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(">");
}
}
이것을 실행하면 다음과 같은 결과가 나타납니다.
integer: <java.lang.Integer>42<java.lang.Integer>
string : <java.lang.String>foobar<java.lang.String>
이것이 당신이 염두에 둔 것인지 모르겠습니다.