我的问题是
java.lang.IndexOutOfBoundsException:索引0无效,大小为0
private List<List<Restaurant.Menu>> menus = new ArrayList<>();
menus.get(0).get(0).setMenuName("asasdasd");
我为错误创建了一个setter但它仍有问题。我需要添加大约100个菜单名称,1000 foodName
和1000 foodPrize
。我该如何解决?
public class Restaurant
{
@SerializedName("cacheVersion")
@Expose
public String cacheVersion;
@SerializedName("id")
@Expose
public Integer id;
@SerializedName("name")
@Expose
public String name;
@SerializedName("desc")
@Expose
public String desc;
@SerializedName("phones")
@Expose
public List<String> phones = null;
@SerializedName("menus")
@Expose
public List<Menu> menus = null;
@SerializedName("image")
@Expose
public String image;
public class Menu
{
@SerializedName("name")
@Expose
public String name;
@SerializedName("foods")
@Expose
public List<Food> foods = null;
public void setMenuName(String namex)
{
this.name = namex;
}
}
public class Food
{
@SerializedName("name")
@Expose
public String name;
@SerializedName("desc")
@Expose
public String desc;
@SerializedName("price")
@Expose
public String price;
}
}
答案 0 :(得分:3)
您只需拨打
即可设置值SELECT 'Date',
'Close Price',
(('Close Price'/lag('Close Price', 1) OVER (ORDER BY 'Date')) - 1) * 100 AS percentage_change
FROM treasury
ORDER BY 'Date';
答案 1 :(得分:3)
在尝试访问它们之前创建对象:
List<List<Restaurant.Menu>> menus = new ArrayList<>();
menus.add(new ArrayList<Restaurant.Menu>()); // create a List for the first level
menus.get(0).add(new Restaurant.Menu()); // create object for the second level
menus.get(0).get(0).setMenuName("asasdasd"); // access them
请注意,没有任何价值可以使Menu
成为内部班级
您可以通过嵌套类来简化:
public static class Menu { ...}
正如您所注意到的,List
List
操作相当麻烦。
作为替代方案,如果它符合您的功能要求,您可以创建自己的类来包装此结构或使用第三方库(Guava库或Apache Common)。
作为旁注,我想知道你为什么要把与之相关的事情分开。
Restaurant
与Menu
相关
您应该使用包含一组Restaurant
的{{1}}来存储Menu
个对象。
您还可以引入参数化构造函数来简化Menu
和Restaurant
创建以及链接菜单添加的流畅方法。
它可以提供客户端代码,例如:
Menu
此处private List<Restaurant> restaurants = new ArrayList<>();
void test() {
Restaurant restaurant = new Restaurant("my restaurant").add(new Menu("a menu"))
.add(new Menu("another menu"));
restaurants.add(restaurant);
Menu menu = restaurants.get(0)
.getMenus()
.get(0);
}
所需的更改:
Restaurant
在public Restaurant add(Menu menu) {
this.menus.add(menu);
return this;
}
public Restaurant(String name) {
this.name = name;
}
public List<Menu> getMenus() {
return menus;
}
:
Menu
答案 2 :(得分:0)
正如那句老话:给一个人一条鱼,你喂他一天,但教一个人钓鱼,他会吃一辈子。那么,什么时候会发生异常?
抛出以指示某种索引(例如数组,字符串或向量)超出范围。
你的问题是由于有一个没有元素的空列表 - 这是你的外部列表,因此
尺寸为0
然后你尝试访问第一个元素:
索引0无效