interface Ivisitor{
@deduceStrategy("...")
void visit(Icosmos c);
}
방문자가이 인터페이스를 구현한다
class Visitor implements Ivisitor{
@deduceStrategy("...")
public void visit(Icosmos c)
{
....
}
}
동적 프록시 : 핸들러 클래스
public class strategyLoader{
public static <T> T create(Class<T> clazz,Object wrap) {
T object = (T) Proxy.newProxyInstance(strategyLoader.class.getClassLoader(), new Class[] { clazz },new Handler(wrap));
return object;
}
}
주요부 :
public class Handler implements InvocationHandler {
Object obj;
public Handler(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
if (m.isAnnotationPresent(deduceStrategy.class)) {
Class[] parameterTypes = m.getParameterTypes();
if((parameterTypes.length==1)&&(**Icosmos.class.isInstance(parameterTypes[0])**))
{
........
}
Visitor.visit에 전달 된 Icosmos의 정확한 유형을 기반으로 적절한 전략을로드해야합니다. 그러나 매개 변수 [0]은 절대로 Icosmos 인스턴스로 해석되지 않습니다. 누군가 나에게 탈출구를 보여 주면 감사하겠습니다. 클라이언트가로 방문자를 호출
Ivisitor visitor = strategyLoader.create(Ivisitor.class,Visitor.class.newInstance());
instanceof를 컴파일하지 않았다 발견 불환 유형 : 필요 java.lang.Class의 : com.patterns.visitor.Icosmos이 일지 어떨지는 일을했다. 이 차이가 발생하는 이유는 무엇입니까? 형식을 지정할 수 있지만 기본 인터페이스 나 클래스의 인스턴스는 할당 할 수없는 경우는 언제입니까? – IUnknown
@IUnknown 여기서 'isAssignableFrom' 두 java.lang.Class 객체 사이의 관계를 테스트하면,'instanceof' 연산자는 클래스 또는 인터페이스 이름에 대해 객체 참조를 테스트합니다. 'java.lang.Class'에 대해 객체 참조를 테스트하는 동적 버전의'instanceof'는 당신이 시작한'isInstance()'메소드입니다. –