【问题标题】:Convert DefaultListModel to List in Java在 Java 中将 DefaultListModel 转换为 List
【发布时间】:2021-04-28 08:51:03
【问题描述】:

我正在制作一个包含 JList 的 Swing 应用程序,并且列表中的所有对象都存储在 DefaultListModel 中。同时我需要将列表传递给一个接收列表作为输入的方法。如何将 DefaultListModel 转换为 List ?

这是我得到的错误:

The method computeSpending(List<Subscription>) in the type SubscriptionSpending is not applicable for the arguments (DefaultListModel<Subscription>)

【问题讨论】:

    标签: java list swing jlist defaultlistmodel


    【解决方案1】:

    如何将 DefaultListModel 转换为 List ?

    Arrays.asList(defaultListModel.toArray());


    说明:

    DefaultListModel 不是List 的子类。因此,不能直接将其作为List 参数传递。相反,您可以将参数类型更改为ListModel&lt;E&gt;。如:

    computeSpending(ListModel<Subscription>)
    

    另外, 如果您必须需要将DefaultListModel&lt;Subscription&gt; 传递给List,您可以使用:

    List<Subscription> asList = Arrays.asList(defaultListModel.toArray());
    

    【讨论】:

    • 用我得到的第二种方法:SubscriptionSpending 类型中的方法 computeSpending(List) 不适用于参数 (List)
    • @pz7,您不能将其“转换”为列表。您能做的最好的事情就是将其转换为 List。然而,最好的解决方案是忘记使用 List 并将 DefaultListModel 传递给您的 computeSpending(...) 方法。 DefaultListModel 有一个get(...) 方法,就像 List.get(..) 一样,所以你的方法没有逻辑变化。如果您真的想要 List,那么您需要将模型中的数据 复制 到列表中。但这不是一个好的解决方案,因为现在您在两个地方都引用了数据。
    • 我的问题是 computeSpending(...) 方法也需要使用 List 作为输入。
    • 仅供参考,从 Java 9 开始,现代替代方案将是 List.of( defaultListModel.toArray() )。这将返回一个unmodifiable List,一个未指定的具体类的实例。
    猜你喜欢
    • 2023-03-23
    • 2013-10-09
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多