Предупреждение о перечислении - PullRequest
1 голос
/ 15 ноября 2011

Я хочу выполнить с Eclipse пример кода, предоставленного с этого веб-сайта RxTx :

import gnu.io.*;
public class SerialPortLister {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        listPorts();
    }
    private static void listPorts()
    {
        java.util.Enumeration<CommPortIdentifier> portEnum = CommPortIdentifier.getPortIdentifiers();  // this line has the warning
        while ( portEnum.hasMoreElements() ) 
        {
            CommPortIdentifier portIdentifier = portEnum.nextElement();
            System.out.println(portIdentifier.getName()  +  " - " +  getPortTypeName(portIdentifier.getPortType()) );
        }        
    }
    private static String getPortTypeName ( int portType )
    {
        switch ( portType )
        {
            case CommPortIdentifier.PORT_I2C:
                return "I2C";
            case CommPortIdentifier.PORT_PARALLEL:
                return "Parallel";
            case CommPortIdentifier.PORT_RAW:
                return "Raw";
            case CommPortIdentifier.PORT_RS485:
                return "RS485";
            case CommPortIdentifier.PORT_SERIAL:
                return "Serial";
            default:
                return "unknown type";
        }
    }
}

В строке 13 появляется предупреждение: Type safety: The expression of type Enumeration needs unchecked conversion to conform to Enumeration<CommPortIdentifier>

Что означает это предупреждение и как его решить?

Ответы [ 2 ]

6 голосов
/ 27 июля 2015

Более подробно о втором пункте маркировки от Владислава Бауэра вы можете инициализировать portEnum, например:

Enumeration<?> portEnum = CommPortIdentifier.getPortIdentifiers();

И затем внутри структуры while вы можете выполнить приведение каждого элемента к нужному типу, в данном случае CommPortIdentifier:

 CommPortIdentifier portIdentifier = (CommPortIdentifier) portEnum.nextElement();

При сотворении каждого элемента предупреждение исчезнет. Но мы должны быть осторожны и убедиться, что portEnum всегда содержит элементы типа CommPortIdentifier, как мы и ожидаем.

0 голосов
/ 15 ноября 2011

Я не знаю код метода getPortIdentifiers, но в текущей ситуации:

  • Решение состоит в том, чтобы добавить следующую аннотацию перед методом, для которого выдается предупреждение: @SuppressWarnings ("unchecked")

  • Вы также можете привести тип к неизвестному типу.Пример: перечисление portEnum = CommPortIdentifier.getPortIdentifiers ();

...