【问题标题】:How can a string be used to call an object method in Java?Java中如何使用字符串调用对象方法?
【发布时间】:2015-02-20 16:24:01
【问题描述】:

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

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;
}

我知道我不能让字符串看起来像一个技能对象:

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

主要问题是数组要填充用户输入,因此数组需要是字符串数组。我将如何解决这个问题?

【问题讨论】:

  • String 类没有“getName()”方法。使用数组来存储您创建的数据类型的元素,并确保它包含一个 getName 类。

标签: java


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    当您说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);
    

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

    【讨论】:

      【解决方案3】:

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

      使用附加了方法的对象。不过,不要使用数组(因为您只在其中创建一个空间),只需使用常规实例即可。

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

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

      【讨论】:

        【解决方案4】:

        如果您需要这样的行为,我建议创建一个 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;}
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-17
          • 1970-01-01
          • 1970-01-01
          • 2012-08-23
          • 1970-01-01
          • 2022-11-16
          • 2012-04-08
          • 2023-03-29
          相关资源
          最近更新 更多