По моему мнению, вы не должны опускать его, если это возможно, но это работает.
Пропускать это означает использование необработанного типа. Во время выполнения это не имеет значения, так как общие значения стираются во время компиляции, но вы можете получить предупреждения компилятора и / или предупреждения / ошибки / ошибки linter, потому что тип <Object>
не подходит.
Если вы не знаете тип или не хотите его указывать, вы все равно можете использовать <? extends Object>
.
Проблема в том, что если вы хотите сделать что-то вроде этого:
List<String>[] data=new List<String>[16];
Это не работает потому что вы не можете легко создавать экземпляры массивов обобщений.
В этом случае я бы исключил вмешательство типа и игнорировал (подавлял) (возможные) предупреждения компилятора.
@SuppressWarnings("unchecked")
List<String>[] data=new List[16];
Но, как @ vbezhenar упоминается в комментариях:
Лучше избегать использования массивов обобщенных c типов, просто используйте для этого что-то вроде List<List<String>>
.
Как правило, с List
легче работать, чем с массивами, особенно если вы используете дженерики.