Ich versuche immer noch, LSP zu verstehen. Nach dem, was ich bisher verstanden habe, sollten Subklassen/Subtypen in der Lage sein, Baseclass/Main-Typ zu ersetzen, und das Programm sollte intakt funktionieren.Liskov Substitutionsprinzip - verletze ich es hier?
Ich habe folgendes ...
abstract class Warehouse<T> {
private StockLoader<T> loader;
private List<T> stock;
protected setStockLoader(StockLoader loader) {
this.loader = loader;
}
protected List<T> getStock() {
return stock;
}
public void load() {
stock = loader.load();
}
abstract showStock();
}
class WheatWH extends Warehouse<Wheat> {
@Override
public void showStock() {
// Print stocck with getStock() returns Wheat;
}
}
class RiceWH extends Warehouse<Rice> {
@Override
public void showStock() {
// Print stocck with getStock() returns Rice;
}
}
interface List<T> StockLoader<T>() {
public List<T> load();
}
class PlainStockLoader implements StockLoader<Wheat>{
public List<Wheat> load() {
//Code
}
}
class Rice {
.....
}
class Wheat {
....
}
Ist es LSP verletzen? Wenn nicht, was würde LSP im obigen Progress verletzen? Verstößt dies auch gegen andere Prinzipien? Kann dies auf andere Weise verbessert werden?
'public void showStock() {// Druckstack mit getStock() gibt zurück Weizen; } 'Eine ungültige Methode kann nicht" Weizen zurückgeben ". Außerdem ist es wichtig, uns mitzuteilen, warum Sie glauben, dass dieser Code gegen den LSP verstößt. –
Ich kann keine Verletzungen von LSP sehen. Was für einen Aspekt davon könnte Ihrer Meinung nach eine Verletzung sein? –
Gibt es einen Grund, warum 'Warehouse' abstrakt ist? Das Erstellen einer Unterklasse für jeden unterschiedlichen Inhaltstyp erscheint übermäßig, wenn die Klasse bereits generisch ist. –