2008/03/24 - [direct] - Java와 Keyword Parameter : map을 이용한 파라미터 전달 혹은 수많은 파라미터를 넘겨줄 것 인가?
2008/03/24 - [direct] - 뭉쳐져 있는 파라미터와 펼쳐져 있는 파라미터 해결은?
에 이은 3번째 시간이다.
먼저 구현을 해보았는데
라이브러리화 시킬 수는 없는 패턴 정도의 추상화를 뽑아보았다.
아이디어는 Enum 객체와 Annotation 정도 인데
메소드에 어노테이션을 붙여서 필수 파라미터와 옵션 파라미터를 각각 정의 할 수 있도록 하는 정도까지 진행해보았는데
아무래도 Enum에 사용할 파라미터들을 소스 단계에서 선언해주어야 한다는 것이 부담이 되어서
팩토리로 생성 하는 것으로 변경을 고려 중이다.
<T> T getParam() 같이 몰랐던 문법도 있으니 소스를 첨부한다.
이 방식에서 더 진행을 한다고 하면
아마 validate 메소드를 컴파일 단계에서 처리할지, 런타임에서 처리할지 결정해야 할 것이다.
2008/03/24 - [direct] - 뭉쳐져 있는 파라미터와 펼쳐져 있는 파라미터 해결은?
에 이은 3번째 시간이다.
먼저 구현을 해보았는데
라이브러리화 시킬 수는 없는 패턴 정도의 추상화를 뽑아보았다.
아이디어는 Enum 객체와 Annotation 정도 인데
메소드에 어노테이션을 붙여서 필수 파라미터와 옵션 파라미터를 각각 정의 할 수 있도록 하는 정도까지 진행해보았는데
아무래도 Enum에 사용할 파라미터들을 소스 단계에서 선언해주어야 한다는 것이 부담이 되어서
팩토리로 생성 하는 것으로 변경을 고려 중이다.
<T> T getParam() 같이 몰랐던 문법도 있으니 소스를 첨부한다.
public enum P {
KEYWORD, INDEX;
private String name = this.name();
private Object value;
@Override
public String toString() {
return name;
}
public <T> T getParam(){
return (T)(value);
}
public <T> P v(T parameterValue) {
this.value = parameterValue;
return this;
}
public static void validate(Class<? extends TestedClass> clazz,
String methodName, P[] params) throws IllegalArgumentException{
try {
Method method = clazz.getMethod(methodName, P[].class);
if(method.isAnnotationPresent(Parameters.class)){
Parameters parameters = method.getAnnotation(Parameters.class);
P[] required = parameters.required();
}
} catch (SecurityException e) {
throw new UnsupportedOperationException(e);
} catch (NoSuchMethodException e) {
throw new UnsupportedOperationException(e);
}
}
public static Map<P, Object> toMap(P[] params) {
// TODO Auto-generated method stub
return null;
}
}
@Target(ElementType.METHOD)
public @interface Parameters {
P[] required();
P[] optional();
}
public class TestedClass {
@Parameters(optional={P.KEYWORD}, required={P.INDEX})
public void callMethod(P... params) {
P.validate(this.getClass(),"callMethod",params);
Map<P, Object> param = P.toMap(params);
params[0].<Integer>getParam();
// this.otherMethod((param.get(P.INDEX)),param.get(P.KEYWORD));
}
private void otherMethod(int index, String keyword) {
// TODO Auto-generated method stub
}
}
이 방식에서 더 진행을 한다고 하면
아마 validate 메소드를 컴파일 단계에서 처리할지, 런타임에서 처리할지 결정해야 할 것이다.
'direct' 카테고리의 다른 글
| 노트북 설정기 (0) | 2008/04/07 |
|---|---|
| 파라미터 전달을 묶어서 보내고 싶다. (2) | 2008/04/01 |
| Opera를 설치했습니다. (0) | 2008/03/28 |
| Adapter Pattern (2) | 2008/03/27 |

