Компилятор хочет, чтобы вы это записывали:
private static List<String> list = new ArrayList<String>();
, потому что в противном случае вы могли бы добавить любой тип, который вам нравится, в list
, делая создание как new ArrayList<String>()
бессмысленным. Java generics - это только функция времени компиляции, поэтому объект, созданный с помощью new ArrayList<String>()
, с радостью примет Integer
или JFrame
элементы, если они назначены ссылке «raw type» List
- сам объект ничего не знает о какие типы он должен содержать, только компилятор делает.
Существует грубый, но эффективный способ внедрения ChangeDetectorRef
в компонент и явного вызова метода detectChanges()
после обновления содержимого selectedList.
Другая идея - вы мутируете в выбранный список (push()
, splice()
и тому подобное) или заменяете его новой версией (this.selectedList = [...this.selectedList, newElem].filter(/* some filter */)
)? Если первое, Angular делает только поверхностное сравнение значения, и мутации, подобные push()
, проскальзывают ниже радара.