ওহ, তবে এটি কুৎসিত, অ-অবজেক্ট-ওরিয়েন্টেড কোড। যে মুহুর্তে আপনি "যদি / অন্য" এবং "টাইপফ" দেখেন, আপনার পলিমারফিজম চিন্তা করা উচিত। এটি যেতে ভুল উপায়। আমি মনে করি জেনারিকগুলি এখানে আপনার বন্ধু।
আপনি কত প্রকারের সাথে ডিল করার পরিকল্পনা করছেন?
হালনাগাদ:
আপনি যদি কেবল স্ট্রিং এবং ইন্টের কথা বলছেন তবে এখানে এটির একটি উপায় রয়েছে। ইন্টারফেস এক্সএমএল জেনারেটর দিয়ে শুরু করুন ("ফু" দিয়ে যথেষ্ট):
package generics;
public interface XmlGenerator<T>
{
String getXml(T value);
}
এবং কংক্রিট বাস্তবায়ন এক্সএমএল জেনারেটর আইএমপিএল:
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>
আপনার মনে মনে এটি ছিল কিনা তা আমি জানি না।