Java: Wie kombiniere ich Attribute zweier Klassen zu einer?Java

Java-Forum
Anonymous
 Java: Wie kombiniere ich Attribute zweier Klassen zu einer?

Post by Anonymous »

Ich versuche, JavaScript-Code in Java-Code zu übersetzen.
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
}
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.

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
}
Es gibt jedoch ein Problem. Eine Java-Klasse kann nur eine Klasse erweitern, daher wähle ich die Verwendung der Delegation:

Code: Select all

public class ClassCombination {
private Class1 class1;
private Class2 class2;
private String position;
public String getName() {
return class1.getName();
}
... // getters & setters
}
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.

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
}
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post