Итак, имеет ли это смысл или что это?
Это создаст глубокую копию аргумента массива String.
arrayOfStrings = Arrays.copyOf( arrayOfStrings, arrayOfStrings.length );
Это скопируетвходной массив для внутренней переменной, которая эффективно предотвращает изменение поля ImmutableClass.arrayOfStrings
путем изменения предоставленного массива.
Если вы просто назначите его следующим образом:
public ImmutableClass( final long id, final String[] input,
final Collection< String > collectionOfString) {
this.id = id;
this.arrayOfStrings = input;
...
}
Затем при изменении input
: input[0] = "new string"
, внутренний arrayOfStrings
тоже был изменен, что нарушает характеристику Immutable
Та же логика применяется к collectionOfString
Кроме того, я хотелчтобы знать, почему аргументы в этом коде помечены как окончательные?
Это предохранитель, предотвращающий переназначение переданного параметра другому значению.