2015-07-20 2 views
0

Мне нужно сделать отливку из одного типа в другой. Гугл, но застрял. Скажем, я хочу отличить initObject классом Casted.Кастинг с NewInstance

Object objInstance = initObject.getClass().newInstance(); 
        Casted str=(Casted)objInstance; 

Почему это делает ClassCastException?

+1

Ну, что такое собственно класс 'initObject', и он расширяет' Casted'? – RealSkeptic

+0

Нет, это не так. Задача состоит в том, чтобы сделать бросок из любого заданного типа другому заданному типу. Может быть, мне нужно создать динамический класс, который расширяет класс объекта, который я хочу использовать? – Mikhail

+4

Я не думаю, что вы понимаете, что означает «бросок» на данный момент. Кроме того, обратите внимание, что это не пытается лишить 'initObject' в любом случае - он создает новый экземпляр типа объекта, значение которого имеет значение initObject' ... –

ответ

6

Для литья требуется, чтобы класс Casted был подклассом или подповерхностным классом класса initObject. Например:

List<String> list = new ArrayList<String>(); 
ArrayList<String> castedList = (ArrayList<String>) list; //works 
Integer int = (Integer) list; // throws ClassCastException 

Альтернативой кастингу может быть вспомогательный метод, который преобразует связанные объекты. Такой пример - метод Collections.toArray.

Кастинг обычно обескуражен, так как вы в основном говорите компилятору, что знаете, каков тип заброшенного объекта, и, конечно, вы можете ошибаться.

+0

получил его, спасибо – Mikhail

+1

Нет проблем. Вы также можете принять мой ответ, если вы его удовлетворены – discipliuned

Смежные вопросы