मैं एक एनोटेशनjava8 - तुलनीय <T> की compareTo <T> व्याख्या compareTo (वस्तु ओ)
package javaannotationtest;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
}
इस वर्ग
package javaannotationtest;
public class Customer implements Comparable<Customer>{
@Override
@CustomAnnotation
public int compareTo(Customer o) {
return 0;
}
}
वर्ग निम्नलिखित में compareTo को लागू किया जाता है करने के लिए एनोटेशन कहते हैं अलग परिणाम देता है जावा -7 और जावा -8 संकलित कोड के साथ।
जावा 7
1.7.0_45 -> public int javaannotationtest.Customer.compareTo(javaannotationtest.Customer)
has annotation of type javaannotationtest.CustomAnnotation
1.7.0_45 -> public int javaannotationtest.Customer.compareTo(java.lang.Object)
has no annotation of type javaannotationtest.CustomAnnotation
ध्यान दें कि compareTo (वस्तु) एनोटेशन जरूरत नहीं है।
जावा 8
1.8.0 -> public int javaannotationtest.Customer.compareTo(javaannotationtest.Customer)
has annotation of type javaannotationtest.CustomAnnotation
1.8.0 -> public int javaannotationtest.Customer.compareTo(java.lang.Object)
has annotation of type javaannotationtest.CustomAnnotation
जावा 8 एनोटेशन compareTo(java.lang.Object)
विधि
यहाँ करने के लिए जोड़ा गया है संस्करण जावा 8 के साथ संकलित के लिए javap से उत्पादन होता है (शायद प्रासंगिक नहीं, यह पता चलता एनोटेशन को जोड़ा गया दोनों विधियों)
Classfile /C:/code/java8annoation/out/production/java8annoation/javaannotationtest/Customer.class
Last modified 17 Apr, 2014; size 719 bytes
MD5 checksum 678e0371f5f9ed5666b513c940f365a7
Compiled from "Customer.java"
public class javaannotationtest.Customer extends java.lang.Object implements java.lang.Comparable<javaannotationtest.Customer>
Signature: #20 // Ljava/lang/Object;Ljava/lang/Comparable<Ljavaannotationtest/Customer;>;
SourceFile: "Customer.java"
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #4.#23 // java/lang/Object."<init>":()V
#2 = Class #24 // javaannotationtest/Customer
#3 = Methodref #2.#25 // javaannotationtest/Customer.compareTo:(Ljavaannotationtest/Customer;)I
#4 = Class #26 // java/lang/Object
#5 = Class #27 // java/lang/Comparable
#6 = Utf8 <init>
#7 = Utf8 ()V
#8 = Utf8 Code
#9 = Utf8 LineNumberTable
#10 = Utf8 LocalVariableTable
#11 = Utf8 this
#12 = Utf8 Ljavaannotationtest/Customer;
#13 = Utf8 compareTo
#14 = Utf8 (Ljavaannotationtest/Customer;)I
#15 = Utf8 o
#16 = Utf8 RuntimeVisibleAnnotations
#17 = Utf8 Ljavaannotationtest/CustomAnnotation;
#18 = Utf8 (Ljava/lang/Object;)I
#19 = Utf8 Signature
#20 = Utf8 Ljava/lang/Object;Ljava/lang/Comparable<Ljavaannotationtest/Customer;>;
#21 = Utf8 SourceFile
#22 = Utf8 Customer.java
#23 = NameAndType #6:#7 // "<init>":()V
#24 = Utf8 javaannotationtest/Customer
#25 = NameAndType #13:#14 // compareTo:(Ljavaannotationtest/Customer;)I
#26 = Utf8 java/lang/Object
#27 = Utf8 java/lang/Comparable
{
public javaannotationtest.Customer();
descriptor:()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Ljavaannotationtest/Customer;
public int compareTo(javaannotationtest.Customer);
descriptor: (Ljavaannotationtest/Customer;)I
flags: ACC_PUBLIC
Code:
stack=1, locals=2, args_size=2
0: iconst_0
1: ireturn
LineNumberTable:
line 7: 0
LocalVariableTable:
Start Length Slot Name Signature
0 2 0 this Ljavaannotationtest/Customer;
0 2 1 o Ljavaannotationtest/Customer;
RuntimeVisibleAnnotations:
0: #17()
public int compareTo(java.lang.Object);
descriptor: (Ljava/lang/Object;)I
flags: ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: aload_1
2: checkcast #2 // class javaannotationtest/Customer
5: invokevirtual #3 // Method compareTo:(Ljavaannotationtest/Customer;)I
8: ireturn
LineNumberTable:
line 3: 0
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 this Ljavaannotationtest/Customer;
RuntimeVisibleAnnotations:
0: #17()
}
कोई जावा 8 में प्रासंगिक परिवर्तनों को समझा सकता है? (योग्य होने पर बाउंटी की पेशकश करेगा)।
मुझे प्रश्न समझ में नहीं आता है। आप किस प्रासंगिक परिवर्तन के बारे में पूछ रहे हैं? इस संबंध में, एनवाटेशन दोनों जावा संस्करणों में दोनों विधियों पर है। –
सं। जावा 7 में, java8.Customer.compareTo (java.lang.Object) में एनोटेशन नहीं है। (यह स्पष्ट करने के लिए प्रश्न संपादित करना) – Jayan