Ответ 1
Поскольку varargs на самом деле являются просто массивами, а generics и массивы не смешиваются (ну), Java традиционно выдавал предупреждение, когда вы вызываете метод с общим тип vararg. Это связано с тем, что массив создается у вызывающего.
Однако вскоре стало очевидно, что массивы, созданные исключительно для передачи в метод varargs, не страдают от той же опасности, что и обычные общие массивы с точки зрения вызывающего, однако сам метод, получивший общий массив, может злоупотреблять ими. Поэтому в Java 7 forward предупреждение появляется в самом методе (в вашем случае onException
) и может быть подавлено с помощью @SafeVarargs
аннотация по методу:
@SafeVarargs
public void onException(Class<? extends Throwable>... exceptions) { }
Если вы на самом деле не используете язык Java 7 или не можете изменить onException
(предположительно, потому что это метод библиотеки), вы можете безопасно использовать @SuppressWarnings
, чтобы скрыть это предупреждение:
@SuppressWarnings("unchecked")
public static void main(String[] args) {
new VarargsFun().onException(IllegalArgumentException.class);
}
Если вы подавляете предупреждения таким образом, будьте осторожны, чтобы изолировать это выражение в своем собственном методе, чтобы вы случайно не подавили другие будущие предупреждения.
Лично я полностью отключу общие предупреждения vararg в моей среде IDE, потому что они почти никогда не указывают неправильный код с точки зрения вызывающего.