【问题标题】:Accessing object's elements of Multiple ArrayList in java在java中访问Multiple ArrayList的对象元素
【发布时间】:2017-07-24 20:25:01
【问题描述】:

我无法访问多个 ArrayList 元素。下面给出了代码,它无法访问值 5 或 6。我的 IDE 不接受我的代码的最后一条语句 System.out.println(specification.get(0).get(0).value); 如何在数组列表中的 ArrayList 中获取对象的元素.

class Node {

    int value;
    boolean explored;

    Node(int v) {
        value = v;
        explored = false;
    }

    int getValue() {
        return value;
    }
}

class Board {

    ArrayList<ArrayList> specification;
    ArrayList<Node> speci_node;

    Board() {
        speci_node = new ArrayList<Node>(1);
        speci_node.add(new Node(5));
        speci_node.add(new Node(6));

        specification = new ArrayList<ArrayList>(1);
        specification.add(speci_node);
        System.out.print(specification.get(0).get(0).value);  // variable 'value' is not found error....
    }
}

【问题讨论】:

  • 您遇到的错误是什么?
  • IDE 不接受最后一条语句。据说找不到变量“值”
  • 两个类是否在同一个文件中?还是它们在不同的文件中,也可能在不同的包中?
  • 不,为了理解我在这里合并了它们

标签: java class object arraylist


【解决方案1】:

虽然@YCF_L 的回答是正确的,但您也可以指定内部ArrayList 的泛型类型以避免强制转换:

specification = new ArrayList<ArrayList<Node>>(1);

此外,NodeBoard 类需要在同一个包中,因为 value 成员是包私有的,因此无法在 Node 类的包之外访问。但这里似乎已经是这样了......

【讨论】:

    【解决方案2】:

    你应该像这样转换你的元素:

    System.out.print(( (Node) specification.get(0).get(0)).value);
    //-----------------|-^^^-|-----------------------------------
    

    这将返回5

    【讨论】:

    • 正确声明泛型类型就不需要强制转换
    • 它仍然是一个解决方案 @FedericoPeraltaSchaffner 我的回答对 OP 有帮助,那么为什么要投反对票?
    • mmmm @FedericoPeraltaSchaffner 好的 :)
    • 因为我在之前的评论中所说的:如果外部 ArrayList 被正确声明,则不需要强制转换。如果您编辑您的问题并澄清这一点,我很乐意撤消我的反对意见
    • 我的回答对 OP 有帮助,它仍然是解决这个问题的一种方法,也许 OP 需要像这样有很多解决方案 @FedericoPeraltaSchaffner 好的,你可以随意投反对票,我不介意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多