私は次のクラスを持っています:
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の正確なタイプに基づいて、適切な戦略をロードする必要があります。ただし、parameter[0]がIcosmosのインスタンスに解決されることはありません。誰かが私に道を教えてくれたら幸いです。クライアントはビジターを次のように呼び出します。
Ivisitor visitor = strategyLoader.create(Ivisitor.class,Visitor.class.newInstance());