Java: правильно проверенный экземпляр класса с использованием отражения

Я пытаюсь использовать одну из простейших форм отражения для создания экземпляра класса:

package some.common.prefix;

public interface My {
    void configure(...);
    void process(...);
}

public class MyExample implements My {
    ... // proper implementation
}

String myClassName = "MyExample"; // read from an external file in reality

Class<? extends My> myClass =
    (Class<? extends My>) Class.forName("some.common.prefix." + myClassName);
My my = myClass.newInstance();

Приведение типов неизвестно Объект класса, который мы получили от Class.forName дает предупреждение:

Type safety: Unchecked cast from Class<capture#1-of ?> to Class<? extends My>

Я пробовал использовать подход проверки instanceof :

Class<?> loadedClass = Class.forName("some.common.prefix." + myClassName);
if (myClass instanceof Class<? extends RST>) {
    Class<? extends My> myClass = (Class<? extends My>) loadedClass;
    My my = myClass.newInstance();
} else {
    throw ... // some awful exception
}

, но это дает ошибку компиляции: Невозможно выполнить проверку instanceof для параметризованного типа Class . Вместо этого используйте форму Class , Поскольку дополнительная информация об общем типе будет удалена во время выполнения. Итак, я полагаю, что не могу использовать подход instanceof .

Как мне от него избавиться и как я должен это делать правильно? Можно ли вообще использовать отражение без этих предупреждений (то есть без их игнорирования или подавления)?

5
задан GreyCat 12 April 2011 в 15:36
поделиться