JDK-4778092 : Selector.keys().addAll() doesn't throw UnsupportedOperationException
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.nio
  • Affected Version: 1.4.2
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: solaris_2.6
  • CPU: sparc
  • Submitted: 2002-11-13
  • Updated: 2002-11-15
  • Resolved: 2002-11-15
Related Reports
Duplicate :  
Description

Name: auR10023			Date: 11/13/2002



java.nio.channels.Selector.keys().addAll() doesn't throw 
UnsupportedOperationException.

Javadoc for Selector.keys() method states:

...
The key set is not directly modifiable. A key is removed only after it has been cancelled and its channel has been deregistered. Any attempt to modify the key set will cause an UnsupportedOperationException to be thrown.
...

Here is the example:

-------test.java---------

import java.io.*;
import java.nio.*;
import java.nio.channels.*;

public class test {
        
    public static void main(String args[]) {
        
        DatagramChannel channel = null;
        Selector sel = null;
        SelectionKey key = null;
        try {
            channel = DatagramChannel.open();
            channel.configureBlocking(false);
            sel = Selector.open();

            key = channel.register(
            sel, SelectionKey.OP_WRITE);
        } catch (IOException e) {
            System.out.println("Unexpected IOException");
            return;
        }

        try {
            sel.keys().addAll(sel.keys());
            System.out.println("UnsupportedOperationException should be " +
                               "thrown");
            return;
        } catch (UnsupportedOperationException e) {
        }
        System.out.println("OKAY");
    }
}

Here is the result
#java -version
java version "1.4.2-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b06)
Java HotSpot(TM) Client VM (build 1.4.2-beta-b06, mixed mode)

#java test
UnsupportedOperationException should be thrown

======================================================================