Java: Wie kombiniere ich Attribute zweier Klassen zu einer?
Posted: 29 Dec 2024, 05:17
Ich versuche, JavaScript-Code in Java-Code zu übersetzen.
In JavaScript können Schnittstellen Attribute haben und eine Schnittstelle kann mehrere Schnittstellen erweitern:
Ich möchte diesen JavaScript-Code in Java-Code übersetzen. Ich habe mehrere Ideen, aber ich weiß nicht, ob es sich um gute Designs handelt.
Es gibt jedoch ein Problem. Eine Java-Klasse kann nur eine Klasse erweitern, daher wähle ich die Verwendung der Delegation:
Dies würde zu einer Menge wiederholter Arbeit führen, wenn die Delegationshierarchie tief ist. Ich habe versucht, die Annotation @Delegate in Lombok zu verwenden, aber das ist experimentell und unterstützt keine rekursive Delegation.
Diese Lösung würde zu einem hohen Arbeitsaufwand beim Schreiben von Gettern und Settern in Schnittstellen führen. Und ich kann Lombok nicht verwenden, um Getter und Setter in Schnittstellen automatisch zu generieren.
Gibt es eine elegantere und einfacher zu implementierende Lösung?
In JavaScript können Schnittstellen Attribute haben und eine Schnittstelle kann mehrere Schnittstellen erweitern:
Code: Select all
interface Interface1 {
name?: string
age?: number
}
interface Interface2 {
id?: string
}
interface InterfaceCombination extends Interface1, Interface2 {
position?: string
}
Erste Idee: Klassen und Delegation
Da es nur Java-Schnittstellen gibt endgültige statische-Attribute, ich wähle Klassen aus, um diese Attribute beizubehalten:Code: Select all
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
}
Code: Select all
public class ClassCombination {
private Class1 class1;
private Class2 class2;
private String position;
public String getName() {
return class1.getName();
}
... // getters & setters
}
Zweite Idee: Schnittstelle & Getter & Setter
Obwohl eine Java-Klasse nur eine Klasse erweitern kann, kann eine Java-Schnittstelle mehrere Schnittstellen erweitern.Code: Select all
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
}
Gibt es eine elegantere und einfacher zu implementierende Lösung?