Estoy tratando de traducir código JavaScript a código Java.
En JavaScript, las interfaces pueden tener atributos y una interfaz puede extender múltiples interfaces:
interface Interface1 { name?: string age?: number } interface Interface2 { id?: string } interface InterfaceCombination extends Interface1, Interface2 { position?: string }Quiero traducir este código JavaScript a código Java. Tengo varias ideas, pero no sé si son buenos diseños.
Dado que las interfaces de Java solo tienen atributos final static , elijo clases para mantener esos atributos:
public class Class1 { private String name; private Number age; public String getName(); public void setName(String name); ... // getter & setter for age } public class Class2 { private String id; ... // getter & setter for id }Sin embargo, ahí está el problema. Una clase de Java solo puede extender una clase, así que elijo usar la delegación:
public class ClassCombination { private Class1 class1; private Class2 class2; private String position; public String getName() { return class1.getName(); } ... // getters & setters }Esto daría lugar a una gran cantidad de trabajo repetido cuando la jerarquía de la delegación es profunda. Traté de usar la anotación @Delegate en lombok, pero esto es experimental y no admite la delegación recursiva.
Aunque una clase Java solo puede extender una clase, una interfaz Java puede extender múltiples interfaces.
public interface Interface1 { public String getName(); public void setName(); ... // getter & setter for age } public interface Interface2 { ... // getter & setter for id } public interface InterfaceCombination extends Interface1, Interface2 { ... // getter & setter for position }Esta solución conduciría a un trabajo pesado en la escritura de getters y setters en las interfaces. Y no puedo usar lombok para generar captadores y definidores automáticamente en las interfaces.
¿Hay alguna solución más elegante y fácil de implementar?
Siempre puede hacer que los atributos sean públicos si no desea escribir varios captadores y definidores. Además, en Java, el código debe ser:
public interface InterfaceCombination implements Interface1, Interface2 {No
public interface InterfaceCombination extends Interface1, Interface2 {