无法访问对象的方法

时间:2017-10-13 17:47:41

标签: java

我对Java很新,可能看不到明显的问题,但这是我的问题:

出于某种原因,我无法访问班级MenuItem的方法:

public class MenuItem {
    String name;
    double price;

    public MenuItem (String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return this.name;
    }
    public String toString() {
        return this.name + "\t" + this.price;
    }
}

在以下代码段中,我的IDE强调了方法getName() red并说:

  

"找不到符号"

这是代码:

public static void main(String[] args) {
   ArrayList<Object> menuItems = new ArrayList<Object>();

   menuItems.add(new MenuItem("Pizza", 2.22));

   System.out.println(menuItems.get(0).getName());
}

我将我的代码与其他代码进行了比较,但未发现任何差异。

不知怎的,toString()方法完美无缺。它会返回this.name + "\t" + this.price;而不是filechallenge.MenuItem@15db9742,它会在删除方法时返回。

有人有想法吗?我真的不明白......

3 个答案:

答案 0 :(得分:6)

ArrayList<Object> menuItems ;
输入

以保存Object的引用。它不知道你在运行时添加了什么。

将其更改为特定类型

List<MenuItem> menuItems = new ArrayList<MenuItem>();

答案 1 :(得分:0)

问题在于这一行:ArrayList<Object> menuItems = new ArrayList<Object>();。您尝试在getName()上致电Object,而不是MenuItem

import java.util.*;

public class MenuItem {
  String name;
  double price;

  public MenuItem (String name, double price) {
    this.name = name;
    this.price = price;
  }

  public String getName() {
    return this.name;
  }

  public String toString() {
    return this.name + "\t" + this.price;
  }

  public static void main(String[] args) {
     ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();

     menuItems.add(new MenuItem("Pizza", 2.22));
     //System.out.println(menuItems);
     System.out.println(menuItems.get(0).getName());
  }
}

或者,如果您希望列表中包含Object个,那么当您将项目拉出时,可以明确地将Object转换为MenuItem

import java.util.*;

public class MenuItem {
  String name;
  double price;

  public MenuItem (String name, double price) {
    this.name = name;
    this.price = price;
  }

  public String getName() {
    return this.name;
  }

  public String toString() {
    return this.name + "\t" + this.price;
  }

  public static void main(String[] args) {
     ArrayList<Object> menuItems = new ArrayList<Object>();

     menuItems.add(new MenuItem("Pizza", 2.22));
     //System.out.println(menuItems);
     MenuItem mi = (MenuItem) menuItems.get(0);
     System.out.println(mi.getName());
  }
}

答案 2 :(得分:0)

试试这句话

System.out.println(((MenuItem)menuItems.get(0)).getName());

(或)

ArrayList<MenuItem> MenuItems = new ArrayList<MenuItem>();
menuItems.add(new MenuItem("Pizza", 2.22));
System.out.println(menuItems.get(0).getName());

在调用方法之前,需要对其进行正确的类型转换。希望这会对你有所帮助