【问题标题】:generic method syntax using defaultlistmodel as an argument使用 defaultlistmodel 作为参数的通用方法语法
【发布时间】:2014-09-08 18:43:47
【问题描述】:
DefaultListModel<String> strings = new DefaultListModel<String>();
DefaultListModel<Integer> integers = new DefaultListModel<Integer>();

private <T> void sortList(DefaultListModel<T> defaultListModel)
{
    T objects[] = (T[])defaultListModel.toArray(); 

    defaultListModel.clear();

    Arrays.sort(objects);

    for (T object: objects)
    {
        defaultListModel.addElement(object);
    }
}



我怎样才能在不收到未经检查的强制转换警告且不使用 @suppress 的情况下编写上述内容?

【问题讨论】:

  • 第二行出现编译器错误(您需要从整数中删除“s”)。
  • @splunebob,感谢您的提醒。我现在将其删除。

标签: java swing generics methods defaultlistmodel


【解决方案1】:

你什么都没做。未经检查的强制转换警告的原因是 DefaultListModel toArray() 方法不是通用的。它返回一个 Object 数组,当您将类型转换为泛型类数组 T[] 时,编译器会发出警告。您可以通过将下面的行放在您的方法 sortList 上方来避免警告:-

@SuppressWarnings("unchecked")
private <T> void sortList(DefaultListModel<T> defaultListModel)
{
      .....
}

【讨论】:

  • 我不想压制警告,我想压制我的错误、缺乏知识并提高我的理解力。
  • 我怎样才能使它的T[]?
  • @johnny 据我所知,除了抑制它之外,您无法实际修复此警告,因为 DefaultListModel 是 rt.jar 中的一个类,作为 jdk 7 及更高版本的一部分,我们不能修改。如果 JDK 中提供的 DefaultListModel 中的 toArray 方法是通用的(就像类一样),则不会出现此警告。所以我敢打赌,你只需要取消警告。
  • 我最近阅读了一篇文章,其中指出所写的 id 是正确的,并且收到警告是“正常的”。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多