【问题标题】:Java Nested ArrayList returns ObjectJava 嵌套数组列表返回对象
【发布时间】:2016-01-13 20:35:21
【问题描述】:

我有一个嵌套的 ArrayList

ArrayList<ArrayList<MenuItem>> MenuList = ArrayList<ArrayList<MenuItem>>()

MenuItem 是包含项目名称和任务(int)的类。我正在使用几个按钮来遍历我的菜单,当我按下“enter”键时,我想访问当前选定的 MenuItem。

代码如下;

// enter button pressed
if(buttonStateEnter != lastButtonStateEnter){
   // changes
   // get current menu
   ArrayList currentMenuList = MenuList.get(currentMenu);

   // get menuItem obj
   Object test = currentMenuList.get(0);

   System.out.println(test.getClass());

   // get the task (int)
   //int changeTask = subNest.getTask();

   lastButtonStateEnter = buttonStateEnter;
   redraw = true;
}

我想创建 MenuItem 测试而不是 Object 测试,因为我无法以这种方式访问​​我的方法。 test.getClass() 返回类 MenuItem。将 MenuItem 测试放入代码编译会报错

java.lang.Object cannot be converted to MenuItem

【问题讨论】:

  • 将您的列表类型转换为实际类型
  • 好吧,您确实将MenuList#get 保存为原始类型,它基本上只适用于Object。你不应该那样做,而是使用泛型
  • 什么是菜单列表?
  • MenuList 是我的菜单(包含多个菜单)抱歉,已编辑

标签: java class object arraylist nested


【解决方案1】:

List&lt;MenuItem&gt; Menu = new ArrayList&lt;MenuItem&gt; () 应该会有所帮助。

或者您必须使用get 操作对其进行类型转换,如下所示:
(MenuItem)Menu.get(

但第二个选项会给你警告以确保你正在转换为正确的类型

【讨论】:

  • 如果它们相互兼容,最好将其声明为 supermost 类
  • 谢谢!类型转换解决了问题
【解决方案2】:
// enter button pressed
if(buttonStateEnter != lastButtonStateEnter) {
  // changes
  // get current menu
  ArrayList<MenuItem> currentMenuList = MenuList.get(currentMenu);

  // get menuItem obj
  MenuItem test = currentMenuList.get(0);

  System.out.println(test.getClass());

  // get the task (int)
  //int changeTask = subNest.getTask();

  lastButtonStateEnter = buttonStateEnter;
  redraw = true;
}

【讨论】:

  • 在声明变量时建议不要依赖于实现。
  • MenuItem 无法转换为 java.util.List
【解决方案3】:
// enter button pressed
if(buttonStateEnter != lastButtonStateEnter){
   // changes
   // get current menu
   ArrayList <MenuItem> currentMenuList = MenuList.get(currentMenu);

   // get menuItem obj
   MenuItem test = currentMenuList.get(0);

   System.out.println(test.getClass());

   // get the task (int)
   //int changeTask = subNest.getTask();

   lastButtonStateEnter = buttonStateEnter;
   redraw = true;
}

This should work... 

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多