我对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
,它会在删除方法时返回。
有人有想法吗?我真的不明白......
答案 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());
在调用方法之前,需要对其进行正确的类型转换。希望这会对你有所帮助