2014-05-16 2 views
0

по какой-то причине, когда я запускаю свое приложение, вместо того, чтобы получать имя лекции, я получаю кучу случайных символов, которые появляются. Однако я не знаю, почему. Заранее спасибо!Метод toString возвращает случайные символы

public Lecture(String lecturename) { 
    this.lecturename = lecturename; 
    listofwork = new ArrayList<Work>(); 
} 

public String toString(Lecture lecture) { 
    return lecture.lecturename; 
    } 

    /////////// IN ANOTHER ACTIVITY ///////////////////// 

    Lecture test = new Lecture("TEST"); 
    Toast.makeText(getApplicationContext(), test.toString(), Toast.LENGTH_LONG).show(); 

И вместо того, чтобы тост сказать «TEST», я получаю [email protected] У меня есть ощущение, что он возвращает объект лекции, а не строку. Тем не менее, я не могу понять, почему причина заключается в том, что код настолько прост.

+1

Взгляд в метод ToString(), унаследованный от класса Object Чет. –

+0

Обратите также внимание, что вы перегружаете метод toString. –

+0

Попробуйте [это] (http://stackoverflow.com/questions/3615721/how-to-use-the-tostring-method-in-java) – Geros

ответ

1

Вы пишете toString, который принимает аргумент Lecture и вызывает toString(), который не принимает никаких аргументов. Если вы измените определение метода на отсутствие аргументов, вы правильно вернете Object.toString().

public String toString() { 
    return this.lecturename; 
} 

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

Lecture test = new Lecture("TEST"); 
Toast.makeText(getApplicationContext(), test.toString(test), Toast.LENGTH_LONG).show(); 
1

Когда вы делаете test.toString(), вы напечатав * тест-объект самого *, а не строка, представляющий объект. Потому что вы не переопределяют Object#toString() (вы перегружен его вместо этого), ваш объект наследует эту реализацию:

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

И это, вероятно, не то, что вы хотели.

Что вам нужно сделать, это положить метод toString()вы имеете внутри в Lecture класс, и удалить его формальный параметр. Тогда это должно сработать.

Хорошая идея - поставить аннотацию @Override на методы, которые вы намеревались переопределить. Таким образом, если вы случайно запутались, компилятор должен исправить ошибку/предупреждение, сообщив вам об этом.

0

вы можете изменить свой код, как этот

public Lecture(String lecturename) { 
    this.lecturename = lecturename; 
    listofwork = new ArrayList<Work>(); 



    public String toString() { 
     return this.lecturename; 
    } 

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