Implementierung eines Interface durch 2 verschiedene Klassen

reach44

Mitglied
Hallo Leute,

ich hab ein Verständnis-Problem und bäuchte Hilfe. Ich habe folgendes Klassendiagramm:

Anhang anzeigen 3605

Mir ist klar, dass es so nicht funktioniert. Jetzt frage ich mich, welche Lösung hier am schlausten wäre oder ob mein Ansatz im Gesamten so nicht funktionieren kann.

Mein Ziel ist es verschiedene DAOs vom IPersistableDAO-Interface abuzleiten, die jedoch nur spezifische Klassen entgegennehmen, die das IPersistable-Interface implementieren.

Vielen Dank schonmal
 
Ok mein erster Post hat das falsch dargestellt, bzw. das Bild ist nicht ganz richtig.

IConfigurationDAO soll eine Klasse und kein Interface sein und die IPersistableDAO implementieren. Jedoch in der save-Methode das IConfiguration-Interface aufnehmen.
 
Ich persönlich finde solche UML-Diagramme ja... ... ...

Könntest du das als (4 Zeilen editierbaren, ausprobierbaren und im Vergleich zu einem solchen Diagramm viel zielgerichteteren) Code posten?
 
Hier mein Code:

Java:
public interface IPersistableDAO {
	public void save(IPersistable p);
}

Java:
public interface IPersistable {

}

Java:
public interface IConfiguration extends IPersistable {

}

Java:
public class ConfigurationDAO implements IPersistableDAO {

	@Override
	public void save(IConfiguration p) {
		

	}

}

Es ist mir klar, dass der Code nicht funktioniert. Aber gibt es eine Möglichkeit sicherzustellen, dass in die ConfigurationDAO nur IConfiguration-Interfaces reingehen und nicht andere Interfaces die von IPersistable abgeleitet sind?
 
Ich glaub was du suchst sind Generics:

Java:
public interface IPersistableDAO<T extends IPersistable> { 
// T ist hier nicht genau definiert, alles was bekannt ist, ist dass T irgendwie
// von IPersistable ableitet (oder IPersistable [I]ist[/I])
    public void save(T t);
}

Java:
public class ConfigurationDAO implements IPersistableDAO<IConfiguration> { 
// Wir implementieren IPersistableDAO und setzen für T den Typ IConfiguration ein.
// Damit steht zur Compile-Zeit fest, dass die save-Methode dieser Klasse IConfiguration erwartet.
    @Override
    public void save(IConfiguration p) {
        
    }
}
 
Zuletzt bearbeitet:

Zurück
Oben