【问题标题】:Creating a ArrayList from a IObservableList - Is it possible从 IObservableList 创建 ArrayList - 是否可能
【发布时间】:2012-12-17 19:51:29
【问题描述】:

我正在从另一个类中的 ArrayList 创建一个新的 ArrayList。

  ArrayList<AplotDataModel.AplotDatasetData> tableData = AplotDataModel.getInstance().getArrayData();

我已经将另一个类中的 arraylist 更改为 IOservableList。 所以我希望它就像更改获取 ObservableList 而不是 ArrayList 的方法一样简单

 ArrayList<AplotDataModel.AplotDatasetData> tableData = AplotDataModel.getInstance().getObservableList();

我收到以下错误:

类型不匹配:无法从 IObservableList 转换为 ArrayList

编辑 AplotDatasetData 是 AplotDataModel 的子类。

 public class AplotDatasetData {

  TCComponentItemRevision rev;
  TCComponentDataset   componentdataset;
  String prlValue;
  String datasetName;
  String markUp = "No";

  //////////////////////////////////////////////////////////////////////////
  //                           Constructor                                //
  //////////////////////////////////////////////////////////////////////////
  public AplotDatasetData(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
     rev = tcRevision;
     componentdataset = selectedDataset;

  }// end Constructor

  ///////////////////////////////////////////////////////////////////////////
  //                            getDataset()                               //
  ///////////////////////////////////////////////////////////////////////////
  public TCComponent getDataset() {
     return componentdataset;
  }// end getDataset()

  ///////////////////////////////////////////////////////////////////////////
  //                               getRev()                                //
  ///////////////////////////////////////////////////////////////////////////
  public TCComponent getRev() {
     return rev;
  }// end getRev()

  ///////////////////////////////////////////////////////////////////////////
  //                             getPRLValue()                             //
  ///////////////////////////////////////////////////////////////////////////
  public String getPRLValue() {
     try {
        prlValue = rev.getRelatedComponent("IMAN_master_form_rev").getStringProperty("PRL");
     }
     catch (TCException e) {
        e.printStackTrace();
     }
     return prlValue;
  }// end getPRLValue()

  ///////////////////////////////////////////////////////////////////////////
  //                           getDatasetName()                            //
  ///////////////////////////////////////////////////////////////////////////
  public String getDatasetName() {
     try {
        datasetName = componentdataset.getStringProperty("object_string");
     }
     catch (TCException e) {
        e.printStackTrace();
     }
     return datasetName;
  }// end getDatasetName()

  ///////////////////////////////////////////////////////////////////////////
  //                          getECMarkupValue()                           //
  ///////////////////////////////////////////////////////////////////////////
  public String getMarkupValue() {
     return markUp;
  }// end getECMarkupValue()

  ///////////////////////////////////////////////////////////////////////////
  //                          setECMarkupValue()                           //
  ///////////////////////////////////////////////////////////////////////////
  public void setMarkupValue(String markupValue) {
     markUp = markupValue;

  }// end getECMarkupValue()

这是我的基本数据模型。用户选择发送的数据 TCComponentItemRevision 版本; TCComponentDataset 组件数据集;

到 ObservableList,然后我使用 AplotDatasetData 从 rev 获取更多信息,componentdataset 来填充我的表。

因此,用户单击 GUI 上的按钮会打开一个新的 gui 对话框。新的 Gui 还有一个包含几个新列的表 - 我只是想获取用户在第一个 GUI 中填充的 ObservableList 并使用它来构建一个新的数组列表。

ObservableList 不能扩展像 AplotDatasetData 这样的类吗?

【问题讨论】:

  • IOservableList 是否扩展了ArrayList?更多代码可能会有所帮助。
  • 试试IObservableList tableData = ...
  • 为什么你认为 IObservableList 可以分配给 ArrayList 类型的变量?除非 IObservableList 扩展了 ArrayList,否则这就像将香蕉分配给 Car 类型的变量。
  • 为什么要把它放在ArrayList 中?只需将其放入List
  • 你的代码真的应该作为一个例子来展示如何不使用 cmets :-)

标签: java


【解决方案1】:

您可以从集合中创建新的 ArrayList。由于org.eclipse.core.databinding.observable.list.IObservableList 是一个集合,

ArrayList<AplotDataModel.AplotDatasetData> tableData = new ArrayList<AplotDataModel.AplotDatasetData>(AplotDataModel.getInstance().getObservableList());

应该可以。

如果您不需要 ArrayList,也可以将 IObservableList 分配给 List:

List<AplotDataModel.AplotDatasetData> tableData = AplotDataModel.getInstance().getObservableList();

【讨论】:

    【解决方案2】:

    您必须更改 tableData ArrayList 中的泛型以支持 IObservable:

    ArrayList<IObservable> tableData = AplotDataModel.getInstance().getObservableList();
    

    基本上,您最初说我有一篮子苹果。把那边那堆苹果放进我的苹果篮里。

    然后,你把那堆苹果换成了橘子。现在,你是说把那堆橙子放进我的苹果篮里。你认为你可以把橙子放进去,因为它是一个篮子——但你不能。这是一个苹果篮。把它换成一个橙色的篮子。

    编辑

    我误读了这个问题。如果你想让它工作,你需要 IObservableList 来扩展 ArrayList。

    【讨论】:

    • 列表本身是一个 IObservalbeList。这不是导致问题的列表的通用类型。
    • 我猜IObservableList 不是用户类。
    • 那么一个班轮是不可能的。他必须手动遍历列表并传入每个值。
    【解决方案3】:

    好吧,我不知道 AplotDataModel 是什么,但你可以使用&lt;?extends ?&gt;,比如:

    Class c = AplotDataModel.getInstance().getClass();
    ArrayList<?extends c ?> tableData = AplotDataModel.getInstance().getObservableList();
    

    ArrayList<?extends IObservalbeList ?> tableData = AplotDataModel.getInstance().getObservableList();
    

    【讨论】:

    • 阅读问题。列表的通用类型不是问题。 OP 获取一个 IObservableList 实例,并尝试将其分配给 ArrayList。而且您的代码不是有效的 Java 代码。
    • 然后把结果放到List变量中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2021-07-07
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多