有关调用方法的提示

时间:2012-01-23 16:26:35

标签: java methods return invoke

我正在尝试从此字符串调用该方法,以便我可以向客户端询问他们的用户名等。

这是代码:

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 Name(name); 我熟悉使用PHP的OO编程,但是几年没用java了,所以如果我的逻辑或技能缺乏,请原谅我!

由于

3 个答案:

答案 0 :(得分:3)

试试这个:

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

或者你可以在一行中完成:

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

希望有所帮助。

答案 1 :(得分: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)。

但是,如果这是聊天服务器类,您可以改为将inout作为属性,并避免传递它们:

   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());

答案 2 :(得分:0)

如果我理解正确,你有:

  1. 一个对象“Name”,可以使用包含名称
  2. 的String进行初始化
  3. 返回String对象的函数(getNameFromClient)
  4. 您想通过使用函数获取名称String来创建Name对象。 这将是这样做的:

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

    为什么呢? Name name是Name类型变量的声明,它现在只是一个指针。

    然后你说要创建一个新名称(新名称(/ 带名字的字符串应该在这里 /); 但你需要名字String来初始化它。

    名称字符串是您的函数返回的内容(getNameFromClient)。 所以你把它放在初始化构造函数参数中。这导致了这个:(我假设缓冲的读者被命名并且打印作者在这里命名)

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