我想将从
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;
}
}
为了避免在
user
方法中将 Player
转换为 playerSetup
,您可以更改方法签名以显式接受 Player
对象而不是通用 Object
。这样,您就可以直接调用 Player
方法而无需强制转换。
以下是修改
Main
类的方法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Player user = new Player();
playerSetup(input, user);
System.out.println(user.getName());
}
private static void playerSetup(Scanner input, Player user) {
System.out.println("Hello, please enter your name: ");
user.setName(input.nextLine());
System.out.println("Hello " + user.getName());
}
}
通过将
playerSetup
的参数类型从 Object
更改为 Player
,您现在可以直接在 setName
对象上调用 getName
和 user
,而无需强制转换它。这使您的代码更干净、更具可读性。
这是完整的
Player
类供参考:
public class Player {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}