В Java вызов метода void - PullRequest
       43

В Java вызов метода void

0 голосов
/ 27 ноября 2009

В Java есть способ вызвать метод void из конструктора. Я пытаюсь что-то вроде этого, но получаю сообщение об ошибке, что компилятор не может найти метод символа printThis (java.lang.String):

public class Date{

public Date(String inString){

  String s = inString;

   String b;


     b.printThis(s);

}


public void printThis(getString)

{

System.out.printf(System.out.printf( new SimpleDateFormat("MM/dd").format(new SimpleDateFormat("MM/dd").parse(getString) ) );

}

Ответы [ 5 ]

3 голосов
/ 27 ноября 2009

Вы хотите printThis(s) - компилятор ищет метод printThis для экземпляра String, который не существует.

2 голосов
/ 28 ноября 2009

Есть много ошибок в коде, как представлено. Это те, которые я заметил.

public class Date{

Проблема: у вас отсутствует объявление пакета, это означает, что оно будет в пакете по умолчанию. Это плохая идея.

Проблема: вы используете имя класса, которое совпадает с обычно используемыми классами в стандартной библиотеке классов. Это плохая идея.

public Date(String inString){
    String s = inString;
    String b;
    b.printThis(s);

Ошибка: код пытается вызвать метод в String API с именем printThis(...). Такой метод не существует. Вы, вероятно, должны избавиться от b и просто позвонить printThis(s)

Ошибка: код пытается использовать неинициализированный локальный (b), и это приведет к ошибке компиляции (если вы "исправили" предыдущую ошибку, изменив тип b на что-то, имеющее printThis метод).

Проблема: плохая практика для конструктора - вызывать метод для конструируемого объекта, если есть вероятность, что он может быть переопределен в подклассе. Проблема заключается в том, что метод переопределения (из подкласса) может быть вызван для объекта до завершения инициализации суперкласса. Можно безопасно вызывать методы static или private.

}

public void printThis(getString) {

Ошибка: в объявлении есть синтаксическая ошибка. Измените getString на String getString.

Проблема: выбор имени параметра (IMO) не имеет смысла. Что такое "получить строку" ???

    System.out.printf(System.out.printf( 
        new SimpleDateFormat("MM/dd").format(
        new SimpleDateFormat("MM/dd").parse(getString) ) );

Ошибка: ошибка компиляции: скобки не сбалансированы.

Ошибка: ошибка компиляции: первый аргумент printf должен быть String или Locale. В вашем коде первый аргумент внешнего вызова - это экземпляр PrintStream.

Ошибка: System.out.printf(System.out.printf( не имеет смысла. Вы почти наверняка должны использовать только System.out.println или System.out.print. Если вы используете метод printf, вы должны указать строку формата в синтаксисе, указанном в PrintStream javadocs. (Это НЕ то же самое, что синтаксис, используемый для форматов даты !!!)

}

Ошибка: отсутствует '}' для завершения класса.

Проблема: ваш стиль кода требует много работы. Если вы можете поклясться на Библии, что никто больше не будет 1050 * читать ваш код (!), Тогда я полагаю, все в порядке. В противном случае такого рода вещи недопустимы. Если бы это была домашняя работа, я бы сразу отбросил вам 50% ваших оценок за то, что не пытался сделать правильный стиль.

1 голос
/ 27 ноября 2009

Вы использовали printThis () как метод String. Если вы хотите напечатать дату, вы можете

printThis(s);

Как правило, не рекомендуется использовать то же имя класса (Date), что и в классе библиотеки JDK

0 голосов
/ 27 ноября 2009

Вы получаете эту ошибку, потому что пытаетесь вызвать printThis () для объекта b, который является строкой. Вы хотите:

public Date(String inString) {
  printThis(inString);
}

Просто к вашему сведению, обычно не рекомендуется называть классы так же, как классы JDK (например, Date) Кроме того, задание inString, которое вы выполняете, ничего не дает. Возможно, ваш код является упрощением того, что вы делаете, но я все равно упомянул об этом.

0 голосов
/ 27 ноября 2009

Следующие строки не будут работать:

String b;
    b.printThis(s);

То, что делает приведенный выше код, пытается вызвать метод printThis объекта String с именем b.

Поскольку метод String.printThis не существует, компилятор возвращает сообщение об ошибке, в котором говорится, что он не может найти метод.

Вероятно, подразумевается следующее:

printThis(s);

Выше будет вызывать метод printThis текущего экземпляра.

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