2011-09-07 4 views
1

Следующий код работает, однако я его не написал. Он просматривает имена портов компьютеров и пытается сопоставить их с указанной строкой (для последовательной коммутации RxTx).Java: перечисление последовательного порта и for-loop

Мой вопрос в том, что делает утверждение внутри цикла for? Я никогда не видел каких-либо договоренностей, кроме того, для (statementize; condition test; iterator) statement;

По существу, я спрашиваю, что делает часть (String portName: PORT_NAMES), и оператор «:» делает?

private static final String PORT_NAMES[] = { 
     "/dev/tty.usbserial-A9007UX1", // Mac OS X 
     "/dev/ttyUSB0", // Linux 
     "COM4", // Windows 
     }; 

     CommPortIdentifier portId = null; 
    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); 

    // iterate through, looking for the port 
    while (portEnum.hasMoreElements()) { 
     CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); 
     for (String portName : PORT_NAMES) { 
      if (currPortId.getName().equals(portName)) { 
       portId = currPortId; 
       break; 
      } 
     } 
    } 

Благодаря

ответ

0

Это Javaдля каждого- заявления. Он просто выполняет итерации через каждый элемент коллекции, указанный после знака :.

0

Это то, что я помню, услышав название цикла «расширенный для». Это в основном эквивалент Java оператора C# «foreach»; он выполняет итерацию через объекты String в PORT_NAMES Enumeration.

EDIT: Linky http://leepoint.net/notes-java/flow/loops/foreach.html

+0

PORT_NAMES не является перечисление его массив строк. – Lynch

+0

Я думаю, это работает и на массивах. – iandisme

0

Это Java для-каждой конструкции, которая была знакома с тех пор JDK 1.5. Это в основном эквивалентно следующему:

for (int i = 0; i < PORT_NAMES.length; ++i) { 
    String portName = PORT_NAMES[i]; 
    etc... 
} 

Так что это красивый способ перебрать массив или коллекцию того, чтобы использовать индексную переменную, которая не используется нигде в цикле. Для получения более подробной информации обратитесь к документации Oracle:

http://download.oracle.com/javase/1,5.0/docs/guide/language/foreach.html

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