将对象作为参数传递到 Java 方法中的最佳方法是什么? [已关闭]

问题描述 投票:0回答:1

我想将从

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;
    }
}
java oop
1个回答
0
投票

我会传递

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());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.