Enumerationを拡張for文で使う

たまに、Java の Enumeration を使ったサンプルを見かけることがありますが、その大半が Iterator と同じようなアクセスの仕方をしています。

NetworkInterface nic = NetworkInterface.getByName("eth0");
Enumeration<InetAddress> nicAddress = nic.getInetAddresses();
while(nicAddress.hasMoreElements()){
    InetAddress address = nicAddress.nextElement();
    (以下省略)


でも、ちょっと工夫して拡張 for 文を使った方が見やすいです。

NetworkInterface nic = NetworkInterface.getByName("eth0");
for(InetAddress address : Collections.list(nic.getInetAddresses())){
    (以下省略)


Enumeration は 拡張 for 文で使えませんが、List なら OK です。
そこで、Collections.list(…) を使って、Enumeration を ArrayList に変換してみました。


オーバーヘッドがあるかもしれません*1が、こっちのほうが分かりやすいので好きです。

*1:ArrayList 一つ分のメモリと、Enumeration から ArrayList に要素をコピーする時間が余分にかかります。でも、要素数が少なければ問題にならないはずです。