Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why a Socket is not instanceof Closeable at runtime?

Tags:

java

android

In an Android app, I added this code to onCreate()

    Closeable sss = new Socket();
    if (!(sss instanceof Closeable)) {
        throw new RuntimeException("Something unexpected happened");
    }

The imports are:

import java.io.Closeable;
import java.net.Socket;

The code compiles, but I am getting the exception:

E/AndroidRuntime( 8293): java.lang.RuntimeException: Unable to start activity...: java.lang.RuntimeException: Something unexpected happened
...
E/AndroidRuntime( 8293): Caused by: java.lang.RuntimeException: Something unexpected happened
...

In a different context, the glitch causes a java.lang.ArrayStoreException (namely, java.lang.ArrayStoreException: java.net.Socket cannot be stored in an array of type java.io.Closeable[]).

Am I missing something? Any idea what to do?

EDIT Similarly, when DatagramSocket is used as MyClass<DatagramSocket> for MyClass<T extends Closeable>, it causes java.lang.IncompatibleClassChangeError: interface not implemented.

like image 916
18446744073709551615 Avatar asked Dec 02 '25 06:12

18446744073709551615


1 Answers

This issue occurs on Android API levels prior to 19. On affected versions, Socket does not implement Closeable.

Sources:

  • Android: Exception using Closeable interface with Socket
  • https://code.google.com/p/android/issues/detail?id=62909
like image 97
cygery Avatar answered Dec 03 '25 20:12

cygery



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!