Интересное непроверенное предупреждение

Учитывая этот код:

public final class MyMap extends HashMap<MyClass<? extends MyInterface>, MyInterface>
{
    public <T extends MyInterface> T put(MyClass<T> key, T value)
    {
        return (T)key.getClass().getComponentType().cast(super.put(key, value));
    }
}

Я получаю непроверенное предупреждение о приведении актеров от MyInterface к T.

Мне действительно это не нравится, поэтому я использую метод Class.cast() для его приведения. Теперь моя новая функция выглядит так:

public final class MyMap extends HashMap<MyClass<? extends MyInterface>, MyInterface>
{
    public <T extends MyInterface> T put(MyClass<T> key, T value)
    {
        Class<T> cl = (Class<T>)key.getClass().getComponentType();
        return cl.cast(super.put(key, value));
    }
}

Но этот выводит непроверенное предупреждение о приведении класса К классу, так как Object.getClass() возвращает подстановочный класс.

Однако есть ли вероятность того, что key.getClass(). GetComponentType() не вернет Class, так как T определяется типом компонента класса ключа?

0 ответов

Другие вопросы по тегам