2012-01-23 3 views
-1

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

вот код:

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 = new Имя (имя); Я знаком с программированием OO с PHP, но не проработал java в течение нескольких лет, так что простите меня, если у меня нет логики или навыков!

Благодаря

+0

'Имя name = new Name (getNameFromClient (in, out)); ' –

ответ

3

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

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

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

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

Надежда, что помогает.

+0

Имя name = новое Имя (nameString()); Собирается ли компиляция? – kosa

+0

Я не могу ответить на этот вопрос без дополнительных фрагментов кода. –

+0

Он сделал. Я просто написал образец. +1. – kosa

1

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

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

сейчас в общедоступном классе с именем ChatServer –

0

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

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

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

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

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

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

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

Name name = new Name(getNameFromClient(in, out)); 
Смежные вопросы