public class ReplacementTarget { // 대체할 메소드를 가지고있는 대상 클래스.
public String formatMessage(String msg) {
return "<h1>" + msg + "</h1>";
} // overloading
public String formatMessage(Object msg) {
return "<h1>" + msg + "</h1>";
}
}
public class FormatMessageReplacer implements MethodReplacer {
@Override
public Object reimplement(Object arg0, Method method, Object ...args) // 대체할 메소드를 재정의 throws Throwable {
if(isFormatMessageMethod(method)) { // 해당 메서드가 대체할 메소드가 맞는지 체크
String msg = (String) arg0; return "<h2>" + msg + "</h2>"; // 여기서 대체할 메소드 내용을 구현한다.
} else { throw new IllegalArgumentException()
}
}
private boolean isFormatMessageMethod(Method method) { // 대체하려는 메소드가 맞는지 체크해주는 기능을 한다.
if (method.getParameterTypes().length != 1) {
return false;
}
if (!("FormatMessage".equals(method.getName()))) {
return false;
}
if (method.getReturnType() != String.class) {
return false;
}
if (method.getParameterTypes()[0] != String.class) {
return false;
}
return true;
}
}
댓글 영역