2010-12-28 16 views
63

Necesito crear una clase base que implemente varias interfaces con muchos métodos, ejemplo a continuación.Implementación de múltiples interfaces con Java: ¿hay alguna manera de delegar?

¿Hay una manera más fácil de delegar estas llamadas a métodos sin tener que crear una horda de métodos duplicados?

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo { 

    private InterFaceOne if1; 
    private InterFaceTwo if2; 

    public MultipleInterfaces() { 
     if1 = new ImplementingClassOne(); 
     if2 = new ImplementingClassTwo(); 
    } 

    @Override 
    public void classOneMethodOne { if1.methodOne(); } 
    @Override 
    public void classOneMethodTwo { if1.methodTwo(); } 
    /** Etc. */ 


    @Override 
    public void classTwoMethodOne { if2.methodOne(); } 
    @Override 
    public void classTwoMethodTwo { if2.methodTwo(); } 
    /** Etc. */ 

} 

Respuesta

74

Como dije, no hay manera. Sin embargo, un IDE poco decente puede autogenerar métodos de delegado. Por ejemplo, Eclipse puede hacer. Comienzo de la configuración de una plantilla:

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo { 
    private InterFaceOne if1; 
    private InterFaceTwo if2; 
} 

luego botón derecho del ratón, elija Fuente > Generar métodos de delegado y marque las dos if1 y if2 campos y haga clic en OK .

Ver también los siguientes pantallas:

alt text


alt text


alt text

+8

Gracias a BalusC y Lukas para tales rápido y respuestas útiles. Mi proyecto está basado en Eclipse, así que pude usar la respuesta de BalusC casi en tiempo real. Trabajó como un encanto, y me ahorró varias horas de trabajo frustrante. Como nuevo usuario de este foro, estoy sorprendido y encantado con la calidad de los participantes aquí. –

+1

De nada. – BalusC

+6

¡Gran pista! No lo sabía y ahorraría cientos de horas en el futuro :) Lo bueno de stackoverflow: ¡también aprenderás de las preguntas que no te hiciste! –

5

Desafortunadamente: NO.

Todos estamos esperando ansiosamente el apoyo de Java para extension methods

0

No hay forma bonita. Es posible que pueda usar un proxy con el controlador que tiene los métodos de destino y delegar todo lo demás a ellos. Por supuesto, tendrás que usar una fábrica porque no habrá un constructor.

3

Hay una manera de implementar la interfaz múltiple.

Sólo se extienden una interfaz de otro o cree interfaz que se extiende interfaz predefinida Ex:

public interface PlnRow_CallBack extends OnDateSetListener { 
    public void Plan_Removed(); 
    public BaseDB getDB(); 
} 

Ahora tenemos interfaz que amplía otra interfaz para utilizar en salir de clase sólo tiene que utilizar esta nueva interfaz que implementa dos o más interfaces

public class Calculator extends FragmentActivity implements PlnRow_CallBack { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

    } 

    @Override 
    public void Plan_Removed() { 

    } 

    @Override 
    public BaseDB getDB() { 

    } 
} 

espero que esto ayude

Cuestiones relacionadas