fork download
  1. import java.util.*;
  2. import java.util.function.*;
  3. import java.io.*;
  4.  
  5. class Example {
  6. public static void main(String[] args) {
  7. Comparator<String> nonSerializableComparator =
  8. (Comparator<String>) (a, b) -> 0;
  9. test("non-serializable method ref",
  10. (Comparator<String> & Serializable)
  11. nonSerializableComparator::compare);
  12. test("non-serializable lambda",
  13. (Comparator<String> & Serializable)
  14. (a, b) -> nonSerializableComparator.compare(a, b));
  15. Comparator<String> serializableComparator =
  16. (Comparator<String> & Serializable) (a, b) -> 0;
  17. test("serializable method ref",
  18. (Comparator<String> & Serializable)
  19. serializableComparator::compare);
  20. test("serializable lambda",
  21. (Comparator<String> & Serializable)
  22. (a, b) -> serializableComparator.compare(a, b));
  23. }
  24.  
  25. static void test(String type, Object obj) {
  26. try {
  27. obj = serialize(obj);
  28. System.out.printf("%s passed.%n", type);
  29. } catch (Exception e) {
  30. System.out.printf("%s failed with %s%n", type, e.getClass().getName());
  31. }
  32. }
  33.  
  34. static Object serialize(Object obj) throws Exception {
  35. new ObjectOutputStream(bytesOut);
  36.  
  37. objsOut.writeObject(obj);
  38.  
  39. new ByteArrayInputStream(bytesOut.toByteArray());
  40. new ObjectInputStream(bytesIn);
  41.  
  42. return objsIn.readObject();
  43. }
  44.  
  45. static {
  46. Thread.currentThread()
  47. .setUncaughtExceptionHandler((t, e) ->
  48. e.printStackTrace(System.out));
  49. }
  50. }
Success #stdin #stdout 0.26s 320896KB
stdin
Standard input is empty
stdout
non-serializable method ref failed with java.io.NotSerializableException
non-serializable lambda failed with java.io.NotSerializableException
serializable method ref passed.
serializable lambda passed.