Какое объяснение для следующего:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
Компилятор принимает оператор 1. Утверждение 2 помечено компилятором для "создания общего массива".
Хорошее объяснение, которое я видел относительно отказа от общих массивов, - этот, утверждая, что поскольку массивы являются ковариантными, а дженерики - это вы не можете подорвать типичная типизация, если вы разрешили общие массивы.
Оставляя в стороне аргумент о том, должен ли язык идти на крайние этапы создания такого сложного несогласованности в лечении дженериков, чтобы вы не стреляли в себя независимо от того, насколько сильно вы пытаетесь (и если кто-нибудь знает о хороших дискуссиях по относительным достоинствам/недостаткам проблемы, пожалуйста, напишите мне, мне было бы интересно увидеть аргументы), зачем нужно утверждать (1), если (2) нет?