如何在java中从项目引用中获取价值

如何在java中从项目引用中获取价值,java,object,arraylist,reference,Java,Object,Arraylist,Reference,所以我有一个ArrayList of ArrayList,我使用的例子是outer.get(0) 为了得到第一个ArrayList,但我只得到对象引用,我是java新手,请帮助我。如果你感兴趣,这是我的代码 public class MyRecursiveTask extends RecursiveTask<List<Integer>> { private List<Integer> numbers; public MyRecursiveT

所以我有一个ArrayList of ArrayList,我使用的例子是
outer.get(0)
为了得到第一个ArrayList,但我只得到对象引用,我是java新手,请帮助我。如果你感兴趣,这是我的代码

public class MyRecursiveTask extends RecursiveTask<List<Integer>> {

    private List<Integer> numbers;

    public MyRecursiveTask(List<Integer> numbers) {
        this.numbers = numbers;
    }

    protected List<Integer> compute() {

        //if work is above threshold, break tasks up into smaller tasks
        if(this.numbers.size() > 2) {
            System.out.println("Splitting workLoad : " + this.numbers.size());

            List<MyRecursiveTask> subtasks = new ArrayList<MyRecursiveTask>();
            subtasks.addAll(createSubtasks());

            for(MyRecursiveTask subtask : subtasks){
                subtask.fork();
            }

            for(MyRecursiveTask subtask : subtasks) {
                subtask.join();
            }
            System.out.println(subtasks.get(0));
            subtasks.get(1);

            return numbers;

        } else {
            System.out.println("Doing workLoad myself: " + this.numbers.size());
            bubbleSort(numbers);
        }
        return numbers;
    }

    private List<MyRecursiveTask> createSubtasks() {
        List<MyRecursiveTask> subtasks = new ArrayList<MyRecursiveTask>();
        List<Integer> list1 = numbers.subList(0,numbers.size()/2);
        List<Integer> list2 = numbers.subList(numbers.size()/2, numbers.size());

        MyRecursiveTask subtask1 = new MyRecursiveTask(list1);
        MyRecursiveTask subtask2 = new MyRecursiveTask(list2);

        subtasks.add(subtask1);
        subtasks.add(subtask2);

        return subtasks;
    }
公共类MyRecursiveTask扩展了RecursiveTask{
私人名单号码;
公共MyRecursiveTask(列表编号){
这个。数字=数字;
}
受保护列表计算(){
//如果工时高于阈值,则将任务分解为更小的任务
if(this.numbers.size()>2){
System.out.println(“拆分工作负载:+this.numbers.size());
列表子任务=新建ArrayList();
addAll(createSubtasks());
for(MyRecursiveTask子任务:子任务){
子任务fork();
}
for(MyRecursiveTask子任务:子任务){
子任务join();
}
System.out.println(子任务.get(0));
子任务。get(1);
返回号码;
}否则{
System.out.println(“自己做工作量:+this.numbers.size());
气泡运动(数字);
}
返回号码;
}
私有列表创建子任务(){
列表子任务=新建ArrayList();
List list1=numbers.subList(0,numbers.size()/2);
List list2=numbers.subList(numbers.size()/2,numbers.size());
MyRecursiveTask子任务K1=新建MyRecursiveTask(列表1);
MyRecursiveTask子任务K2=新建MyRecursiveTask(列表2);
子任务。添加(子任务K1);
子任务。添加(子任务2);
返回子任务;
}

您正在存储一个对象列表,因此当您想要访问该列表中的第一个元素时,您将获得对存储在列表中的对象的引用,因此为了访问对象列表中的列表,您需要使用object.value属性并查看列表

要获取主列表中每个列表的内容,可以执行类似的操作

for(MyRecursiveTask sub : subtasks) 
    System.out.println(sub.numbers);
编辑#1 我已经在一个在线编译器中测试了这个程序,它运行得很好,不过对代码做了一些更改(更改是为了删除不必要的内容,而不是因为它们会导致错误)


您需要添加一个
getter
方法来从
MyRecursiveTask
对象引用获取
列表

public class MyRecursiveTask extends RecursiveTask<List<Integer>> {

    private List<Integer> numbers;

    public List<Integer> getNumbers() {
        return numbers;
    }

    ...
}
公共类MyRecursiveTask扩展了RecursiveTask{
私人名单号码;
公共列表getNumbers(){
返回号码;
}
...
}
您可以通过以下方式获得值:

List<MyRecursiveTask> outer = ...
MyRecursiveTask object = outer.get(0);
List<Integer> value = object.getNumbers(); // This is the value
列表外部=。。。
MyRecursiveTask对象=outer.get(0);
List value=object.getNumbers();//这是值

您可以用一些输入和输出示例来显示代码吗如果
outer.get(0)
返回一个
ArrayList
,您也可以调用
.get(0)
,如下所示:
outer.get(0).get(0)
问题是它不返回ArrayList,而是通过“我只获取对象引用”返回一个引用,您的意思是说,
System.out.println(subtask.get(0));
正在打印出类似于“ArrayList@2f92e0f4“?这很正常。您将返回ArrayList。您不能只打印ArrayList(或任何缺少toString()方法的对象)有关更多详细信息,请参阅System.out.println。在
子任务
列表中,您正在添加一个非列表的
MyRecursiveTask
对象,因此当您获取
子任务.get(0)时
,您需要将其存储在
MyRecursiveTask
的对象引用中,然后需要使用点运算符调用该对象中的列表。您是否再次检查,或者是否可以将您正在使用的驱动程序代码发送给我
public class MyRecursiveTask extends RecursiveTask<List<Integer>> {

    private List<Integer> numbers;

    public List<Integer> getNumbers() {
        return numbers;
    }

    ...
}
List<MyRecursiveTask> outer = ...
MyRecursiveTask object = outer.get(0);
List<Integer> value = object.getNumbers(); // This is the value