如何使用字符串在Java中调用对象方法?

时间:2015-02-20 08:05:23

标签: java

我有一个名为“Skill”的类,带有getName()方法。我用它来返回我创建的技能对象的名称。当我尝试编译我的代码时,它说“找不到符号方法getName()”。有没有办法解决这个问题?例如,在我的主要方法中:

String[] playerSkill = new String[1];
playerSkill[0] = "a";
System.out.println(playerSkill[0].getName());

在我的技能课程中:

public Skill(String n, String d, int p) {
    name = n;
    description = d;
    power = p;
}

public String getName() {
    return name;
}

我知道我不能让String看起来像Skill对象:

System.out.println((Skill)playerSkill[0].getName());

主要问题是数组要填充用户输入,因此数组必须是String数组。我怎么能绕过这个?

4 个答案:

答案 0 :(得分:5)

您的方法getName来自班级Skill,您尝试从String班级调用它。 你应该这样做:

Skill[] playerSkill = new Skill[1];
playerSkill[0] = new Skill("name", "desc", 3);
System.out.println(playerSkill[0].getName());

答案 1 :(得分:1)

当你说String[] playerSkill = new String[1];这意味着创建的数组是String类型,你只能调用String类的方法。 playerSkill [0]中的元素只能保存String的对象而不能保持Skill

我想你想实现这个目标

    Skill[] playerSkill = new Skill[1];
    playerSkill[0] = new Skill("a", "b", 0);
    System.out.println(playerSkill[0].getName());

由于您提到您需要接受输入然后制作技能对象。您可以从控制台获取字符串int,然后创建Skill实例

Scanner sc = new Scanner(System.in);
String name = sc.next();
String desc = sc.next();
int x = sc.nextInt();
Skill s = new Skill(name, desc, x);

你需要根据你的东西修改这些行

答案 2 :(得分:0)

由于String对象没有附加getName方法,因此Java不允许您在其实例上调用它。

使用附加了该方法的对象。而不是一个数组(因为你只在其中创建一个空格),只需使用常规实例。

Skill skill = new Skill("name", "desc", 10);
System.out.println(skill.getName());

这一点很重要,因为您可能遇到其他对象具有类似命名方法但不能提供所需行为的情况。始终要具体说明您正在与之交互的对象类型。

答案 3 :(得分:0)

如果您需要这样的行为,我建议创建一个POJO,例如:

public class Player{
    private String skill, name;
    public setSkill(String skill){
        this.skill = skill;
    }
    public getSkill(){ return this.skill;}
    public setName(String name){
        this.name=name;
    }
    public getName(){return this.name;}
}