Ich habe ein Objekt, das einige Daten in einer Liste speichert. Die Implementierung könnte sich später ändern und ich möchte die interne Implementierung dem Endbenutzer nicht offen legen. Der Benutzer muss jedoch in der Lage sein, diese Sammlung von Daten zu ändern und darauf zuzugreifen. Zur Zeit habe ich so etwas wie dieses:Ist es besser, Liste oder Sammlung zu verwenden?
public List<SomeDataType> getData() {
return this.data;
}
public void setData(List<SomeDataType> data) {
this.data = data;
}
Bedeutet dies, dass ich die internen Implementierungsdetails erlaubt haben, auszutreten? Sollte ich das stattdessen tun?
public Collection<SomeDataType> getData() {
return this.data;
}
public void setData(Collection<SomeDataType> data) {
this.data = new ArrayList<SomeDataType>(data);
}
Eine Sache zu beachten ist, dass, wenn Sie die tatsächliche Sammlung oder Liste zurückgeben, Sie jemand anderen zu tun, was sie wollen, einschließlich Löschen von Elementen oder sogar das Löschen der ganzen Sache. Sie können besser einen nicht änderbaren Wrapper oder eine Kopie der Liste zurückgeben. –
@PaulTomblin wahr, aber es ist ein bisschen Overkill und künstliche Overhead für das System. Nicht änderbare Wrapper sind sinnvoll, wenn Sie mit Objekten arbeiten, die von Persistenz-Middleware verwaltet werden, und dies auch nur in seltenen Fällen. – comeGetSome
@comeGetSome, deshalb habe ich gesagt "kann" anstatt "muss". Es würde vom Anwendungsfall abhängen - wenn ich eine API für andere verwenden würde, würde ich eine Kopie oder einen Wrapper zurückgeben. Wenn es für mich selbst oder für vertrauenswürdige Kollegen wäre, würde ich ein großes "NICHT ÄNDERN DIESEN WERT" in die Javadocs setzen und es dabei belassen. –