Я хотел бы передать объект с именем 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());
}
}
Игрок.java
public class Player {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
кстати, даже если это разрешено, не рекомендуется записывать объявления массивов как String arg[]; the preferred way is
String[] arg` (так как тип String[]
). См. Разница между массивом int[] и массивом int[]
Чтобы избежать необходимости приведения 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;
}
}
Просто объявите этот метод как
playerSetup(Scanner input, Player user)
.