我想将从
user
类创建的名为 Player
的对象传递到我的 playerSetup
方法中。但是,当我将 user
传递到方法中并尝试调用 user.setName()
时,Java 会给出错误并建议我改为执行 ((Player) user).setName(input.nextLine())
。这可行,但看起来有点混乱,特别是如果我也打算用其他方法来做到这一点。
有更好的方法来解决这个问题还是我坚持这个解决方案?
Main.java
public class Main {
public static void main(String arg[]) {
Scanner input = new Scanner(System.in);
Player user = new Player();
playerSetup(input, user);
System.out.println(user.getName());
}
private static void playerSetup(Scanner input, Object user) {
System.out.println("Hello, please enter your name: ");
/*
user.setName(input.nextLine()); -- I would like for it to look like this,
however it won't work and my IDE reccomends I do it like the line below.
*/
((Player) user).setName(input.nextLine()); // This seems messy having to reference the Player class every time
System.out.println("Hello " + ((Player) user).getName());
}
}
Player.java
public class Player {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
我会传递
Scanner
并返回 Player
,并且我会使用构造函数。并覆盖toString()
。喜欢,
public class Player {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public Player(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
然后你就可以像这样使用它了
public class Main {
public static void main(String arg[]) {
Scanner input = new Scanner(System.in);
Player user = readPlayer(input);
System.out.printf("Hello, %s%n", user);
}
private static Player readPlayer(Scanner input) {
System.out.println("Hello, please enter your name: ");
return new Player(input.nextLine());
}
}