在 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
1个回答
1
投票

为了避免在

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