我在从Java中的方法返回List时遇到了麻烦

时间:2012-05-26 23:17:15

标签: java list arraylist

我正在学习java中的列表,但我很难从像任何原始数据类型的方法返回它。我试图做的就是返回一个节点列表,然后打印出所有标签。我做错了什么?

import java.util.ArrayList;

import java.util.List;

public class TestingArrays 
{

    List<Node> myList1  = new ArrayList<Node>();

    List<Node> myList2 = new ArrayList<Node>();

    List<Node> myList3 = new ArrayList<Node>();

    List<Node> myList4 = new ArrayList<Node>();

    private Node Node1 = new Node("One", myList1);
    private Node Node2 = new Node("Two", myList2);
    private Node Node3 = new Node("Three", myList3);
    private Node Node4 = new Node("Four", myList4);

    public static void main(String arg[])
    {
        List<Node> nodeList = nodeArray();

        for (int i = 0; i < nodeList.size(); i++)
        {
            System.out.println(nodeArray.get(i).label);
        }
    }

    public List<Node> nodeArray()
    {
        List<Node> tempList = new ArrayList<Node>();
        tempList.add(Node1);
        tempList.add(Node2);
        tempList.add(Node3);
        tempList.add(Node4);
        return tempList;
    }
}

3 个答案:

答案 0 :(得分:2)

你不能从静态上下文中调用非静态方法。 make方法nodeArray() static。这将解决你的问题。

您也无法对非静态字段进行静态引用,即Node1Node2Node3Node4。所以让他们static

nodeArray.get(i).label也是错误的,因为它应该是nodeList.get(i).label

答案 1 :(得分:1)

这很奇怪:

nodeArray.get(i)

nodeArray是一个函数。怎么可能编译?这就是为函数和变量赋予好名字的重要性。

另外,因为它是一个列表,你可以使用foreach,如下所示: http://www.leepoint.net/notes-java/flow/loops/foreach.html

哦,在main函数中,您应该创建类的新实例并使用它,或者将所有方法和变量设置为静态。

答案 2 :(得分:1)

nodeArray()方法是TestingArrays对象的方法。所有节点和列表都是TestingArrays对象的属性。

您需要创建一个TestingArrays对象来访问这些内容。

用以下代码替换main方法:

public static void main(String arg[])
{
    List<Node> nodeList = new TestingArrays().nodeArray();

    for (int i = 0; i < nodeList.size(); i++)
    {
        System.out.println(nodeList.get(i).label);
    }
}