У меня есть некоторый Java-код, который необходимо скомпилировать с современными компиляторами, поддерживающими дженерики, а также со старыми или экзотическими компиляторами, которые еще не знают о дженериках. Мне удалось получить почти весь код, скомпилированный нормально и без предупреждений, за исключением редких случаев, когда используется Class.isAssignableFrom ().
Этот пример компилируется с использованием любого компилятора, но компиляторы, поддерживающие обобщенные типы, выдают следующее предупреждение:
"Тип безопасности: метод isAssignableFrom (Class) относится к необработанному типу Class. Ссылки на универсальный тип Class должны быть параметризованы"
public static boolean isType( Class type, Class clazz )
{
return type.isAssignableFrom( clazz );
}
Это избавляет от предупреждения, но, конечно, не компилируется без обобщений:
public static boolean isType( Class<?> type, Class clazz )
{
return type.isAssignableFrom( clazz );
}
Мне удалось исправить некоторые случаи, подставив это вместо Class.isInstance()
, а некоторые другие, используя MyClass.class.isAssignableFrom( clazz )
, который прекрасно компилируется везде, но осталось несколько случаев, когда мне действительно нужно вызвать Class.isAssignableFrom()
для вызова объекта произвольного класса. @SuppressWarnings также невозможно использовать, так как это также понимают только компиляторы, знающие о расширениях Java 1.5 и новее.
Так есть идеи, как это исправить, или мне просто нужно жить с предупреждениями?