Sie in BeanUtils.getCopy (sourceBean) verwendet tun könnte so etwas wie:
public static List<Integer> clone(List<Integer> source) {
return source.stream()
.map(intObj -> new Integer(intObj.intValue()))
.collect(Collectors.toList());
}
Oder altmodischer:
public static List<Integer> clone(List<Integer> source) {
List<Integer> newList = new ArrayList<>();
for(Integer intObj : source) {
newList.add(new Integer(intObj.intValue()));
}
return newList;
}
beider könnte kürzer gemacht, indem Auto-Boxing/Auto-Unboxing genutzt wird. Aber ich habe es explizit gemacht, um absolut klar zu machen, was vor sich geht.
Es ist jedoch eine sinnlose Übung - in der Tat ist es aktiv speicherverschwendend und leistungsschädlich. Integer
ist unveränderlich, so ist es besser für Referenzen auf die gleiche Instanz von Integer
zeigen. Da der Wert Integer
nicht geändert werden kann, ist es unmöglich, durch die gemeinsame Nutzung einer Instanz Schaden zu verursachen.
Dies gilt für unveränderliche Objekte im Allgemeinen und ist der Grund, dass sie eine gute Sache sind.
Sie sind sehr unwahrscheinlich, als Anfänger, einen Fall zu finden, in dem new Integer(...)
eine gute Idee ist (oder sogar Integer.valueOf(int i)
, obwohl diese eine zwischengespeicherte Instanz zurückgeben könnte). Wenn Sie bereits ein Integer
haben, verwenden Sie den Sie haben:
Integer oldVar = ... ;
Integer newVar = oldVar;
Unveränderlichkeit bedeutet, dass immer in Ordnung sein wird. Es ist unmöglich, dass eine Operation newVar
oldVar
beschädigt, weil es keine newVar.setValue(newValue)
gibt.
Wenn Sie ein int
es direkt verwenden und erlauben Java Auto-Boxen in ein Integer
zu konvertieren:
int oldValue = ... ;
Integer newValue = oldValue ; // Java will automatically put this through
// Integer.valueOf(int i)
Sie haben erwähnt, dass Sie wirklich mit booleans arbeiten wollte. Sie sollten in Betracht ziehen, BitSet
zu verwenden.
Da Ganzzahlen unveränderlich sind, warum sollten Sie sie tief kopieren? –