Есть два решения, которые не требуют передачи в объект класса. В обоих случаях я предполагаю, что, поскольку это частная переменная, вы - единственный человек, который вносит в нее что-то, а внешний мир этого не видит.
Один из них - просто использовать простой массив объектов Object[]
. Недостатком является то, что вы потеряете преимущества дженериков и вам придется разыгрывать исходящие из него вещи, что делает код более уродливым. Но так как вы единственный, кто вкладывает в это вещи, то актерский состав всегда должен быть в безопасности. Снаружи не нужно знать, что происходит.
Другие варианты - это своего рода хак. Вы создаете Object[]
, а затем «приводите» его к T[]
. Технически это недопустимо, поскольку Object[]
и T[]
- это разные типы времени выполнения, и первый не может быть приведен ко второму. Но до тех пор, пока вы не передадите массив вне класса (например, вернете его или что-то еще), это не вызовет никаких проблем, потому что T[]
все равно будет стерто до Object[]
, и на самом деле никакое приведение выполнила. Тогда вы можете воспользоваться преимуществами обобщений в своем классе для упрощения кодирования, но вы должны быть предельно осторожны, чтобы не передавать этот массив любому, кто на самом деле ожидает T[]
, потому что это не так.