советы по вызову метода - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь вызвать метод из этой строки, чтобы я мог спросить клиента его имя пользователя и т. Д.

вот код:

public String getNameFromClient(BufferedReader in, PrintWriter out) {

try

{  out.println("Send name");
   String name = in.readLine();
   return name;
} catch (Exception e) {
   System.out.println("ChatClient err: " + e.getMessage());
   e.printStackTrace();
  return null;
}
}

я пробовал getNameFromClient name = новое имя (имя); Я знаком с ОО-программированием на PHP, но несколько лет не занимался java, так что извините, если у меня нет логики или навыков!

Спасибо

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Попробуйте это:

String nameString = getNameFromClient(in, out);
Name name = new Name(nameString);

Или вы можете сделать это в одну строку:

Name name = new Name(getNameFromClient(in, out));

Надеюсь, это поможет.

1 голос
/ 23 января 2012

Я думаю, что синтаксис, который вы хотите, похож на:

  final ChatServer myServer = new ChatServer ();
  final String nameEntered = myServer.getNameFromClient (in, out);
  final Name myName = new Name (nameEntered);

, что идентично:

  final Name myName = new Name (new ChatServer().getNameFromClient (in, out));

(исключая переменные, если они не нужны)

Однако, поскольку этот метод, по-видимому, не изменяет никаких свойств объекта ChatServer, вы можете рассмотреть вопрос о том, чтобы сделать его методом static:

  public class ChatServer { public static String getNameFromClient … }

  final String nameEntered = ChatServer.getNameFromClient (in, out);

Обратите внимание, что static методы вызываются с использованием имени класса, и вам не требуется создавать экземпляр этого класса (new ChatServer) перед их вызовом.

Однако, если это класс сервера чата, вы можете вместо этого сделать in и out свойствами, и вам не придется передавать их в:

   public class ChatServer {
       private final BufferedReader in;
       private final PrintWriter out;
       public ChatServer (…) {
             …
             in = …;
             out = …;
       }
       public getNameEntered () {
             /* notice, not having to pass in & out now */
             /* just use the same ones saved as properties */
             …
       }
   }

   …

   final ChatServer myServer = new ChatServer (…);
   final String nameEntered = myServer.getNameFromClient ();
   final Name myName = new Name (nameEntered);

или

   final ChatServer myServer = new ChatServer (…);
   final Name myName = (myServer.GetNameFromClient());
0 голосов
/ 01 марта 2012

если я правильно понимаю, у вас есть:

  1. Объект «Имя», который может быть инициализирован строкой, содержащей имя
  2. Функция (getNameFromClient), которая возвращает строкуобъект

вы хотите создать объект Name, получив имя String с помощью функции.Это будет сделано так:

Name name = new Name(getNameFromClient(in, out));

Почему?Имя name - это объявление вашей переменной типа Name, это всего лишь указатель прямо сейчас.

Затем вы говорите, что хотите создать новый (новое имя (/ Строка с именем должна идти здесь *)1015 * /); но вам нужно имя String для его инициализации.

Строка имени - это то, что возвращается вашей функцией (getNameFromClient). Поэтому вы помещаете ее ВНУТРИ аргументов конструктора инициализации. Это приводит к этому :(Я предполагаю, что буферизованный читатель назван по имени, а писатель печати назван здесь)

Name name = new Name(getNameFromClient(in, out));
...