public class Converter
{
private Logger logger = Logger.getLogger(Converter.class);
public String convert(String s){
if (s == null) throw new IllegalArgumentException("input can't be null");
logger.debug("Input = " + s);
String r = s + "abc";
logger.debug("Output = " + s);
return r;
}
public Integer convert(Integer s){
if (s == null) throw new IllegalArgumentException("input can't be null");
logger.debug("Input = " + s);
Integer r = s + 10;
logger.debug("Output = " + s);
return r;
}
}
上記の2つのメソッドは非常に似ているので、私は同様のことを行い、実際の作業をクラスに委譲するテンプレートを作成します。しかし、テンプレートを変更せずにこのフレームワークを簡単に拡張したいと思っています。 したがって、たとえば:javaテンプレートデザイン
public class ConverterTemplate
{
private Logger logger = Logger.getLogger(Converter.class);
public Object convert(Object s){
if (s == null) throw new IllegalArgumentException("input can't be null");
logger.debug("Input = " + s);
Object r = doConverter();
logger.debug("Output = " + s);
return r;
}
protected abstract Object doConverter(Object arg);
}
public class MyConverter extends ConverterTemplate
{
protected String doConverter(String str)
{
String r = str + "abc";
return r;
}
protected Integer doConverter(Integer arg)
{
Integer r = arg + 10;
return r;
}
}
しかし、それは動作しません。誰かが私にそれをするよりよい方法を提案することができますか?私は2つの目標を達成したい: 1.拡張可能で、すべての同様の仕事をするテンプレート。 2.拡張クラスの数を最小限に抑えます。
ありがとう、
([ジェネリック]を見てみましょうhttp://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf)。 –