2009-08-06 3 views
0

Я видел несколько тем на SO об этом, но никто на самом деле не ответил на мой вопрос, так вот она:литейные объекты в Java

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

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

EDIT: Извините, все, в моей спешке, я написал это неправильно. Я был прав насчет того, как он на самом деле функционирует, например, String (o), но проблема была связана с тем, что я пытался вернуть неправильный объект в метод. Очень сожалею об этом. Спасибо, что подтвердили, что именно так вам нужно бросить!

Благодаря

+0

Эта последняя строка компилируется для вас? – waxwing

+0

Я сомневаюсь, что он компилируется. – palindrom

ответ

3

Вы хотите

s = (String)o; 

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

(я не верю, что ваш пример будет компилировать, кстати. Существует не соответствующий String конструктор)

2
String s = "a string"; 
Object o = s; 
s = (String)o; 

System.out.println(s); 
0

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

0

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