Приведение объектов в Java - PullRequest
0 голосов
/ 06 августа 2009

Я видел несколько тем на SO по этому поводу, но никто не ответил на мой вопрос, так что вот оно:

String s = "a string";
Object o = s;
s = String(o);  // EDIT this line was wrong
s = (String)o;  // EDIT Corrected line

Теперь это прекрасно компилируется, но выдает исключение ClassCastException. Единственное, что я думал, что есть какой-то способ сделать эту работу. Есть ли способ превратить объект, такой как строка, в этом случае обратно в объект, который когда-то был?

РЕДАКТИРОВАТЬ: Извините всех, в спешке я написал это неправильно. Я был прав насчет того, как он на самом деле функционирует, т.е. String (o), но проблема была на самом деле из-за того, что я пытался вернуть неправильный объект в метод. Очень сожалею об этом. Спасибо, что подтвердили, что именно так вам нужно сыграть!

Спасибо

Ответы [ 4 ]

3 голосов
/ 06 августа 2009

Вы хотите

s = (String)o;

т.е. Вы бросаете, помещая тип объекта в скобки. Обратите внимание, что созданный вами объект всегда a String. Однако ссылка может быть ссылкой на объект, ссылкой на строку и т. Д.

(я не верю, что ваш пример скомпилируется, кстати. Нет подходящего String конструктора)

2 голосов
/ 06 августа 2009
String s = "a string";
Object o = s;
s = (String)o;

System.out.println(s);
0 голосов
/ 06 августа 2009

Когда вы создаете Object o и присваиваете его s, происходит неявное приведение, а строка приводится к объекту. Когда это происходит, вы теряете некоторую информацию. Поэтому, когда вы пытаетесь привести объект обратно к строке, вы пытаетесь ввести информацию, которой у него просто нет. Если бы вы изначально создали строку, затем бросили ее на объект, а затем снова вернулись, тогда у вас не было бы проблемы.

0 голосов
/ 06 августа 2009

В дополнение к ответам Брайана и Бруно: вы не используете код в своем коде, но создаете новую строку через ее конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...