1

この RxTx Web サイトから提供されているサンプル コードを Eclipse で実行したいと考えてい ます。

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>

この警告の意味と解決方法は?

4

2 に答える 2

7

Vladislav Bauer の 2 番目の箇条書きについて詳しく説明すると、次のように portEnum を初期化できます。

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

次に、while 構造の内部で、各要素を必要な型にキャストできます。この場合は CommPortIdentifier:

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

各要素をキャストすると、警告が消えます。ただし、注意して、portEnum に常に CommPortIdentifier 型の要素が含まれていることを確認する必要があります。

于 2015-07-27T15:59:22.257 に答える
0

getPortIdentifiers メソッドのコードはわかりませんが、現在の状況では:

  • 解決策は、警告が報告されたメソッドの前に次の注釈を追加することです: @SuppressWarnings("unchecked")

  • 型を未知の型にキャストすることもできます。例: 列挙 portEnum = CommPortIdentifier.getPortIdentifiers();

于 2011-11-15T08:42:13.373 に答える