Я предполагаю, что вы действительно хотели написать следующее вместо использования Object
на левой стороне. Так как в противном случае, это действительно просто проверка того, имеет ли объект в списке правильный тип.
ClassName o = (classname)list.get(i);
Ну, Java статически типизирована. Невозможно, чтобы вы дали ему строку, и он дал вам соответствующий статический тип, так что вы можете идти без приведения. Даже с обобщениями и Class<T>.cast
тип назначения приведения приводится не строкой, а обобщенным аргументом типа T
, который известен во время компиляции. Вы должны вручную привести к нужному типу или использовать наиболее распространенный тип (в вашем случае это может быть Object).
Если вы сделаете Class.forName(className)
, он вернет вам объект типа Class
, который содержит информацию о типе во время выполнения, так что он позволит вам сделать
Class.forName("my.stuff.MyClass").newInstance()
Но актерам нужен тип, а не объект какого-то типа. Вот почему компилятор сказал вам, что с этим кодом что-то не так.
Статический тип возвращаемой ссылки - Object
. Это важно: динамический тип объекта, на который ссылаются, и статический тип ссылки, указывающей на этот объект. Динамический тип объекта - это то, что может «контролироваться» строкой (с помощью Class.forName
), но статический тип ссылки, с которой вы должны обращаться во время компиляции, и это (просто для примера). ) используется для выбора функций, которые перегружают друг друга, не могут быть определены по строке.