метод toString в Java - PullRequest
       5

метод toString в Java

0 голосов
/ 24 апреля 2011

Почему время отображается не в обычном (читаемом) виде?Метод toString отсутствует?

import java.util.Calendar;

abstract class Calender {

    abstract void showTime();

    void time() {
        Calendar rightNow = Calendar.getInstance();
        System.out.println("Time: " + rightNow);
    }

    public String toString() {
        return "Calender [toString()=" + super.toString() + "]";
    }

}

class Calender1 extends Calender {
    public static void main (String[] args) {
        Calender1 cal = new Calender1();
        cal.time();
    }

    void showTime() {       
    }
}

Спасибо.Новобранец Java.

Ответы [ 5 ]

3 голосов
/ 24 апреля 2011

Текущее время можно отобразить с помощью следующего кода:

DateFormat timeFormat = DateFormat.getTimeInstance();
Calendar currentDate = Calendar.getInstance();
System.out.println(timeFormat.format(currentDate.getTime()));
2 голосов
/ 24 апреля 2011

Не совсем уверен, что вы на самом деле здесь делаете.

Похоже, вы написали свой собственный абстрактный класс Calendar и унаследовали его от Calendar1.

Первый класс Calendar, который выwrite наследует от объекта, toString которого не будет интересен / полезен.

Документы для toString в календаре находятся здесь: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#toString()

Итог - не полагайтесь на него.

0 голосов
/ 24 апреля 2011

Вы, наверное, пробовали это:

Calendar cal = Calendar.getInstance();
System.out.println(cal);

Что дает вывод, как это:

java.util.GregorianCalendar[time=1303645990437,areFieldsSet=true,areAllFieldsSet=true,...

Это метод toString в GregorianCalendar, который предоставляет все подробные сведения о его реализации, а не читаемое представление даты и времени.

В качестве эксперимента вы можете создать анонимный внутренний класс, расширяющий GregorianCalendar с другой реализацией toString:

Calendar cal = new GregorianCalendar() {        
    public String toString() {
        return getTime().toString();
    }
};
System.out.println(cal);

Это печатает:

Sun Apr 24 13:53:10 CEST 2011

(YMMV).

Однако это немного странно. Обычно вы используете DateFormat, как показано в нескольких других ответах, чтобы отделить представление вашего Календаря от его реализации.

0 голосов
/ 24 апреля 2011

Вы звоните super без родительского класса (на самом деле вы звоните Object.toString()) Это вернет имя класса и адрес памяти: http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#toString%28%29

Вы, вероятно, хотите что-то вроде этого:

@Override
public String toString() {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");
    return "Calender [toString()=" + formatter.format(rightNow.getTime()) + "]";
}
0 голосов
/ 24 апреля 2011

Почему вы используете супер в своем базовом классе? Я не совсем уверен, что вы пытаетесь сделать, но в вашем базовом классе Calendar вам просто нужен метод toString ().

И в вашем классе Calender1 вам также необходимо создать метод toString (). Там вы бы назвали use super.toString (), потому что вы наследуетесь от календаря, так что это ваш суперкласс

...