actualización //
Noté que IntelliJ tiene un "generar" opción para la generación de métodos de delegado. Crear una clase nueva:
public class MyDecoratorClass {
private MyInterfaceWithManyMethods myInterface;
}
luego marca MyInterface, vaya a Menú> Métodos Código> Delegados, seleccione todos los métodos que desee para envolver y eso es todo.
// Fin de la actualización
Se podría probar el "Refactoring" -> "Reemplazar la herencia con la delegación" refactorización. Debería poder hacer esto, así. Yo llamo a esto "Código con Alt + Intro"
Vaya a la interfaz para la que desea generar un decorador.
public interface MyInterfaceWithManyMethods {
void method1();
void method2();
void method3();
}
Pulse Alt + Enter, seleccione "Implementar interfaz", dar un nombre a su decorador como "MyDecorator". Esto le da
public class MyDecorator implements MyInterfaceWithManyMethods {
public void method1() {
}
public void method2() {
}
public void method3() {
}
}
En nueva clase, seleccione el nombre de la clase, a continuación, "Refactor" -> "Reemplazar la herencia con la delegación", seleccione su interfaz, marque todos los nombres de los métodos, pulse enter. Obtendrá:
public class MyDecorator {
private final MyObject object = new MyObject();
public void method1() {
object.method1();
}
public void method2() {
object.method2();
}
public void method3() {
object.method3();
}
private class MyObject implements MyInterfaceWithManyMethods {
public void method1() {
}
public void method2() {
}
public void method3() {
}
}
}
Elimine manualmente la clase interna y el inicializador de objetos. Que se obtiene:
public class MyDecorator {
public void method1() {
object.method1();
}
public void method2() {
object.method2();
}
public void method3() {
object.method3();
}
}
Pulse Alt + Enter en el "objeto" que ahora está marcado en rojo, seleccione "Crear un campo", seleccione MyInterfaceWithManyMethods.
public class MyDecorator {
private MyInterfaceWithManyMethods object;
public void method1() {
object.method1();
}
public void method2() {
object.method2();
}
public void method3() {
object.method3();
}
}
Seleccione la variable de objeto, pulse Alt + Enter, seleccione "Agregar parámetro constructor":
public class MyDecorator {
private MyInterfaceWithManyMethods object;
public MyDecorator(MyInterfaceWithManyMethods object) {
this.object = object;
}
public void method1() {
object.method1();
}
public void method2() {
object.method2();
}
public void method3() {
object.method3();
}
}
Usted ve que todo está hecho con unos pocos trazos de Alt + Enter. Parece mucho trabajo, pero se puede hacer en menos de 20 segundos. Si solo tiene 2 o 3 métodos, puede ser más rápido con una plantilla activa, sin embargo, si tiene muchos métodos con firmas complejas, obtendrá un resultado de trabajo en aproximadamente 20 segundos con este método. Alt + Enter simplemente rocas: D
No encuentro cómo funciona cuando desea crear una clase desde cero –
Agregué una descripción completa para usted. –
Thx +1 para la respuesta completa :).Escribí una plantilla de archivo porque cuando se crea la plantilla, solo tienes que crear el archivo, y luego solo una "Alt + Inser". El tiempo para crear debería ser casi el mismo que su solución, pero con menos manipulaciones de teclado. –