Advertisement
Guest User

Untitled

a guest
May 28th, 2015
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.56 KB | None | 0 0
  1. package test;
  2.  
  3. import java.util.Comparator;
  4. import java.io.Serializable;
  5.  
  6. public class StringComparator implements Comparator<String> {
  7.     @Override
  8.     public int compare(String s1, String s2) {
  9.         return Integer.compare(s1.charAt(0), s2.charAt(0));
  10.     }
  11. }
  12.  
  13. public class Test {
  14.     public static final Comparator<String> SOME_COMPARATOR = new StringComparator();
  15.    
  16.     public static void main(String[] args) {
  17.         Comparator<String> methodReference = (Comparator<String> & Serializable) SOME_COMPARATOR::compare;
  18.         Comparator<String> lambda          = (Comparator<String> & Serializable) (a,b) -> SOME_COMPARATOR.compare(a,b);
  19.     }
  20. }
  21.  
  22. /******************************************************
  23.             Decompiled with javap -p -c
  24. *******************************************************
  25. Compiled from "Test.java"
  26. public class test.Test {
  27.   public static final java.util.Comparator<java.lang.String> SOME_COMPARATOR;
  28.  
  29.   public test.Test();
  30.     Code:
  31.        0: aload_0
  32.        1: invokespecial #1                  // Method java/lang/Object."<init>":()V
  33.        4: return
  34.  
  35.   public static void main(java.lang.String[]);
  36.     Code:
  37.        0: getstatic     #2                  // Field SOME_COMPARATOR:Ljava/util/Comparator;
  38.        3: dup
  39.        4: invokevirtual #3                  // Method java/lang/Object.getClass:()Ljava/lang/Class;
  40.        7: pop
  41.        8: invokedynamic #4,  0              // InvokeDynamic #0:compare:(Ljava/util/Comparator;)Ljava/util/Comparator;
  42.       13: checkcast     #5                  // class java/io/Serializable
  43.       16: checkcast     #6                  // class java/util/Comparator
  44.       19: astore_1
  45.       20: invokedynamic #7,  0              // InvokeDynamic #1:compare:()Ljava/util/Comparator;
  46.       25: checkcast     #5                  // class java/io/Serializable
  47.       28: checkcast     #6                  // class java/util/Comparator
  48.       31: astore_2
  49.       32: return
  50.  
  51.   private static java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
  52.     Code:
  53.        0: aload_0
  54.        1: invokevirtual #8                  // Method java/lang/invoke/SerializedLambda.getImplMethodName:()Ljava/lang/String;
  55.        4: astore_1
  56.        5: iconst_m1
  57.        6: istore_2
  58.        7: aload_1
  59.        8: invokevirtual #9                  // Method java/lang/String.hashCode:()I
  60.       11: lookupswitch  { // 2
  61.  
  62.              950484197: 36
  63.  
  64.             1200933166: 50
  65.                default: 61
  66.           }
  67.       36: aload_1
  68.       37: ldc           #10                 // String compare
  69.       39: invokevirtual #11                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
  70.       42: ifeq          61
  71.       45: iconst_0
  72.       46: istore_2
  73.       47: goto          61
  74.       50: aload_1
  75.       51: ldc           #12                 // String lambda$main$62cfd7bc$1
  76.       53: invokevirtual #11                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
  77.       56: ifeq          61
  78.       59: iconst_1
  79.       60: istore_2
  80.       61: iload_2
  81.       62: lookupswitch  { // 2
  82.  
  83.                      0: 88
  84.  
  85.                      1: 171
  86.                default: 246
  87.           }
  88.       88: aload_0
  89.       89: invokevirtual #13                 // Method java/lang/invoke/SerializedLambda.getImplMethodKind:()I
  90.       92: bipush        9
  91.       94: if_icmpne     246
  92.       97: aload_0
  93.       98: invokevirtual #14                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String;
  94.      101: ldc           #15                 // String java/util/Comparator
  95.      103: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  96.      106: ifeq          246
  97.      109: aload_0
  98.      110: invokevirtual #17                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String;
  99.      113: ldc           #10                 // String compare
  100.      115: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  101.      118: ifeq          246
  102.      121: aload_0
  103.      122: invokevirtual #18                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String;
  104.      125: ldc           #19                 // String (Ljava/lang/Object;Ljava/lang/Object;)I
  105.      127: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  106.      130: ifeq          246
  107.      133: aload_0
  108.      134: invokevirtual #20                 // Method java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String;
  109.      137: ldc           #15                 // String java/util/Comparator
  110.      139: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  111.      142: ifeq          246
  112.      145: aload_0
  113.      146: invokevirtual #21                 // Method java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String;
  114.      149: ldc           #19                 // String (Ljava/lang/Object;Ljava/lang/Object;)I
  115.      151: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  116.      154: ifeq          246
  117.      157: aload_0
  118.      158: iconst_0
  119.      159: invokevirtual #22                 // Method java/lang/invoke/SerializedLambda.getCapturedArg:(I)Ljava/lang/Object;
  120.      162: checkcast     #6                  // class java/util/Comparator
  121.      165: invokedynamic #4,  0              // InvokeDynamic #0:compare:(Ljava/util/Comparator;)Ljava/util/Comparator;
  122.      170: areturn
  123.      171: aload_0
  124.      172: invokevirtual #13                 // Method java/lang/invoke/SerializedLambda.getImplMethodKind:()I
  125.      175: bipush        6
  126.      177: if_icmpne     246
  127.      180: aload_0
  128.      181: invokevirtual #14                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceClass:()Ljava/lang/String;
  129.      184: ldc           #15                 // String java/util/Comparator
  130.      186: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  131.      189: ifeq          246
  132.      192: aload_0
  133.      193: invokevirtual #17                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodName:()Ljava/lang/String;
  134.      196: ldc           #10                 // String compare
  135.      198: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  136.      201: ifeq          246
  137.      204: aload_0
  138.      205: invokevirtual #18                 // Method java/lang/invoke/SerializedLambda.getFunctionalInterfaceMethodSignature:()Ljava/lang/String;
  139.      208: ldc           #19                 // String (Ljava/lang/Object;Ljava/lang/Object;)I
  140.      210: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  141.      213: ifeq          246
  142.      216: aload_0
  143.      217: invokevirtual #20                 // Method java/lang/invoke/SerializedLambda.getImplClass:()Ljava/lang/String;
  144.      220: ldc           #23                 // String test/Test
  145.      222: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  146.      225: ifeq          246
  147.      228: aload_0
  148.      229: invokevirtual #21                 // Method java/lang/invoke/SerializedLambda.getImplMethodSignature:()Ljava/lang/String;
  149.      232: ldc           #24                 // String (Ljava/lang/String;Ljava/lang/String;)I
  150.      234: invokevirtual #16                 // Method java/lang/Object.equals:(Ljava/lang/Object;)Z
  151.      237: ifeq          246
  152.      240: invokedynamic #7,  0              // InvokeDynamic #1:compare:()Ljava/util/Comparator;
  153.      245: areturn
  154.      246: new           #25                 // class java/lang/IllegalArgumentException
  155.      249: dup
  156.      250: ldc           #26                 // String Invalid lambda deserialization
  157.      252: invokespecial #27                 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
  158.      255: athrow
  159.  
  160.   private static int lambda$main$62cfd7bc$1(java.lang.String, java.lang.String);
  161.     Code:
  162.        0: getstatic     #2                  // Field SOME_COMPARATOR:Ljava/util/Comparator;
  163.        3: aload_0
  164.        4: aload_1
  165.        5: invokeinterface #28,  3           // InterfaceMethod java/util/Comparator.compare:(Ljava/lang/Object;Ljava/lang/Object;)I
  166.       10: ireturn
  167.  
  168.   static {};
  169.     Code:
  170.        0: new           #29                 // class test/StringComparator
  171.        3: dup
  172.        4: invokespecial #30                 // Method test/StringComparator."<init>":()V
  173.        7: putstatic     #2                  // Field SOME_COMPARATOR:Ljava/util/Comparator;
  174.       10: return
  175. }
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement