компиляция кода, который использует Class.isAssignableFrom () с компилятором и без него - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть некоторый 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 и новее.

Так есть идеи, как это исправить, или мне просто нужно жить с предупреждениями?

1 Ответ

2 голосов
/ 16 ноября 2010

Живите с этим предупреждением или используйте условную компиляцию (зависит от используемого вами инструмента сборки) ... Хотя я не думаю, что это хорошая практика - пытаться поддерживать две версии Java, которые не совместимы. И они могут быть хуже, чем просто предупреждения о компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...