如何为 ArrayList 设置 CellValueFactory return 类型

How to setCellValueFactory return type for ArrayList

我在这段代码中有以下错误:无法推断 ReadOnlyListWrapper<> 的类型参数 我的 return 类型应该是什么样的?我需要为所有列中的每个节点保存 arraylist。但是我不能return它。

        for (Entry<String, String> ent : dc.getSortedOrgAll().entrySet()) {

        TreeTableColumn<String, ArrayList<String>> col = new TreeTableColumn<>(
                ent.getValue());

        col.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<String, ArrayList<String>>, ObservableValue<ArrayList<String>>>() {
            @Override
            public ObservableValue<ArrayList<String>> call(
                    CellDataFeatures<String, ArrayList<String>> param) {
                TreeMap<String, List<String>> temp = (TreeMap<String, List<String>>) dc
                        .getFuncTypeOrg().clone();
                ArrayList<String> result =  new ArrayList<>();
                for (int i = 0; i < temp.size(); i++) {
                    List<String> list = temp.firstEntry().getValue();
                    String key = temp.firstEntry().getKey();
                    // root.getChildren();

                    if (list.get(1).equals("Papier")) {
                        System.out.println(list.get(1));
                    }
                    if (list.get(1).equals(param.getValue().getValue())
                            && list.get(5).equals(col.getText())) {
                        result.add(list.get(2));
                        if(list.size()==9)
                        result.add(list.get(list.size()-1));
                        else result.add("White");

                    } else {
                        temp.remove(key);
                    //  result = null;
                    }

                }

                return new ReadOnlyListWrapper<>(result);
            }
        });

ReadOnlyListWrapper<T> 实现了 ObservableValue<ObservableList<T>>,这不是您所需要的,因为您声明了对 return 和 ObservableValue<ArrayList<T>> 的回调(T 只是String 这里)。

所以我认为你只需要

return new ReadOnlyObjectWrapper<ArrayList<String>>(result);

你可以省略泛型类型:

return new ReadOnlyObjectWrapper<>(result);

只是评论:我认为您可以通过定义一些实际的数据模型 类 让您的生活变得更轻松,而不是试图将您的数据强制放入各种集合实现中。