2011-08-02 17 views
9

¿Cuál es la solución de facto para crear una implementación dinámica de interfaces y/o clases abstractas? Lo que básicamente quiero es:Implementación dinámica para clase de interfaz/abstracta en Java

interface IMyEntity { 
    int getValue1(); 
    void setValue1(int x); 
} 
... 
class MyEntityDispatcher implements WhateverDispatcher { 
    public Object handleCall(String methodName, Object[] args) { 
    if(methodName.equals("getValue1")) { 
     return new Integer(123); 
    } else if(methodName.equals("setValue")) { 
     ... 
    } 
    ... 
    } 
} 
... 
IMyEntity entity = Whatever.Implement<IMyEntity>(new MyEntityDispatcher()); 
entity.getValue1(); // returns 123 

Respuesta

15

Es la clase Proxy.

class MyInvocationHandler implements InvocationHandler { 
    Object invoke(Object proxy, Method method, Object[] args) { 
    if(method.getName().equals("getValue1")) { 
     return new Integer(123); 
    } else if(method.getName().equals("setValue")) { 
      ... 
    } 
    ... 
    } 
} 

InvocationHandler handler = new MyInvocationHandler(); 
IMyEntity e = (IMyEntity) Proxy.newProxyInstance(IMyEntity.class.getClassLoader(), 
               new Class[] { IMyEntity.class }, 
               handler); 
+2

Proxy solo está disponible para interfaces, no clases abstractas –