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 가지 방법은 매우 유사하므로 유사한 작업을 수행하고 실제 작업을 적합한 클래스에 위임하기위한 템플릿을 만들고 싶습니다. 그러나 템플릿을 변경하지 않고이 프레임 작업을 쉽게 확장하려고합니다. 그래서 예를 들면 :자바 템플릿 디자인
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). –