我正在尝试从此字符串调用该方法,以便我可以向客户端询问他们的用户名等。
这是代码:
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了,所以如果我的逻辑或技能缺乏,请原谅我!
由于
答案 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
)。
但是,如果这是聊天服务器类,您可以改为将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());
答案 2 :(得分:0)
如果我理解正确,你有:
您想通过使用函数获取名称String来创建Name对象。 这将是这样做的:
Name name = new Name(getNameFromClient(in, out));
为什么呢? Name name是Name类型变量的声明,它现在只是一个指针。
然后你说要创建一个新名称(新名称(/ 带名字的字符串应该在这里 /); 但你需要名字String来初始化它。
名称字符串是您的函数返回的内容(getNameFromClient)。 所以你把它放在初始化构造函数参数中。这导致了这个:(我假设缓冲的读者被命名并且打印作者在这里命名)
Name name = new Name(getNameFromClient(in, out));