2014-09-08 4 views
0
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?общий метод с использованием синтаксиса DefaultListModel в качестве аргумента

+0

Там это ошибка компилятора с 2-ой строкой (вы должны удалить «S» от Целого). – splungebob

+0

Возможный обман: http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings – splungebob

+0

@splungebob, спасибо за головы. я сейчас удалю его. – johnny

ответ

0

Вы ничего не делаете. Причина неконтролируемого предупреждения о броске заключается в том, что метод DefaultListModel toArray() не является общим. он возвращает массив Object, который, когда вы вводите cast в ваш общий массив классов T[], компилятор дает предупреждение. Вы можете избежать предупреждений, поставив строку ниже выше вашего метода списка сортировки: -

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

Я не хочу подавлять предупреждения, я хочу подавить свои ошибки, недостаток знаний и улучшить свое понимание. – johnny

+0

Как я могу сделать так, чтобы его T []? – johnny

+0

@johnny Я ничего не знаю о том, что вы можете сделать, чтобы исправить это предупреждение, за исключением того, что он запретил его, поскольку DefaultListModel - это класс в rt.jar как часть jdk 7 и выше, которые мы не можем изменить. Если бы метод toArray в DefaultListModel, предоставленный в JDK, был общим (как и класс), это предупреждение не наступило бы. Так что моя ставка заключается в том, что вам просто нужно подавить предупреждение. –

Смежные вопросы