Ну, для начала давайте разберемся, где проблема - это в самом актерском составе.Вот более короткий пример:
public class Test {
public static void main(String[] args) throws Exception {
Object x = (Class<Test>) Class.forName("Test");
}
}
Это все еще та же проблема.Проблема в том, что актерский состав фактически не собирается ничего тестировать, потому что он будет эффективно преобразован в тип Class
.Для Class<T>
это немного удивительнее, потому что на самом деле объект знает , о котором идет речь, но учитывает похожую ситуацию:
List<?> list = ... get list from somewhere;
List<String> stringList = (List<String>) list;
Этот бросок не будет проверять, что он действительно a List<String>
, потому что эта информация теряется из-за стирания типа .
Теперь в вашем случае, на самом деле, есть более простое решение - если вы знаетеимя класса во время компиляции в любом случае, просто используйте:
Class<Foo> fooClass = Foo.class;
Если вы можете предоставить более реалистичный пример, в котором это не случай, мы можем помочь вам определить наиболее подходящую альтернативу.