2009-03-27 2 views
3

이상한 질문 ...대상 객체가없는 Java 동적 프록시?

실제 대상 개체가없는 상태에서 동적 프록시를 사용할 때처럼 Java의 호출 인터셉터를 어떻게 사용할 수 있습니까?

예를 들어, 필자는 런타임에 지정된 인터페이스를 필요로하지 않고 수십 가지 인터페이스로 사용할 수있는 uber 객체를 만들고 싶습니다.

기본적으로이 기능은 대부분의 동적 언어에서 __call 기능처럼 작동합니다.

생각하십니까?

답변

7

아마 내가 질문을 오해하고 있습니다. (알려 주시면 알려주세요.)하지만 시작 하시겠습니까?

import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
import java.util.Arrays; 

public class Main 
{ 
    public static void main(final String[] argv) 
    { 
     final Object    object; 
     final InvocationHandler handler; 
     final Runnable   runnable; 
     final Comparable<Object> comparable; 


     handler = new InvocationHandler() 
     { 
      public Object invoke(final Object proxy, 
           final Method method, 
           final Object[] args) 
       throws Throwable 
      { 
       System.out.println(proxy.getClass()); 
       System.out.println(method); 
       System.out.println(Arrays.toString(args)); 
       return (0); 
      } 
     }; 

     object = Proxy.newProxyInstance(Main.class.getClassLoader(), 
             new Class[] { 
              Runnable.class, 
              Comparable.class, 
             }, 
             handler); 

     runnable = (Runnable)object; 
     runnable.run(); 

     comparable = (Comparable<Object>)object; 
     comparable.compareTo("Hello"); 
    } 
} 
+0

단순하다면 나는 진지하게 몸부림 친다. –

+0

잘 돌아가는 (0) 것은 좀 까다 롭습니다 - 각 메소드에 대해 적절한 유형을 리턴해야합니다 (실행에 대해서는 null이고 compareTo에 대해서는 null). 또한 compareTo에서 할 수있는 일이 내게 모두 명확하지는 않지만 :-) 나는 그것이 그렇게 단순하다고 믿습니다. – TofuBeer

+0

매력처럼 작동 –

관련 문제