Java Generics
ลักษณะทั่วไปของชนิดแปรชนิดข้อมูลหมายความว่าการดำเนินการจะระบุเป็นพารามิเตอร์
สมมติว่าเรามีความต้องการดังกล่าว: เขียนวิธีการเรียงลำดับความสามารถในการสร้างอาร์เรย์อาร์เรย์ของสตริงหรือชนิดอื่น ๆ ของอาร์เรย์จะเรียงลำดับวิธีการที่จะบรรลุ?
คำตอบก็คือคุณสามารถใช้ generics Java
การใช้งาน Java Generics เราสามารถเขียนวิธีการทั่วไปในการจัดเรียงอาร์เรย์ของวัตถุ จากนั้นเรียกวิธีทั่วไปเพื่ออาร์เรย์ของจำนวนเต็มอาร์เรย์จุดสตริงอาร์เรย์ลอยและเรียง
วิธีการทั่วไป
คุณสามารถเขียนวิธีการทั่วไปที่สามารถรับได้เมื่อโทรประเภทที่แตกต่างกันของพารามิเตอร์ พารามิเตอร์พิมพ์วิธีการทั่วไปการจัดการที่คอมไพเลอร์ที่มีการโทรแต่ละวิธีการจากการโอนได้อย่างเหมาะสม
นี่คือกฎในการกำหนดวิธีการทั่วไปคือ:
- ทั้งหมดประกาศวิธีการทั่วไปมีส่วนพารามิเตอร์ชนิดประกาศ (แยกจากกันโดยวงเล็บมุม) ประเภทพารามิเตอร์ส่วนการประกาศก่อนที่จะพิมพ์วิธีการกลับมา (ในตัวอย่างต่อไปนี้ <E>)
- แต่ละส่วนพารามิเตอร์ชนิดประกาศมีมากกว่าหนึ่งชนิดพารามิเตอร์คั่นด้วยเครื่องหมายจุลภาคระหว่างพารามิเตอร์ พารามิเตอร์ทั่วไปยังเป็นที่รู้จักเป็นตัวระบุตัวแปรประเภทจะใช้ในการระบุชื่อของประเภททั่วไป
- พารามิเตอร์ชนิดสามารถนำมาใช้ในการประกาศประเภทกลับและสามารถรับได้ว่าเป็นความจริงทั่วไปยึดพารามิเตอร์ชนิด
- ประกาศวิธีการทั่วไปและวิธีการอื่น ๆ เช่นร่างกาย ทราบว่าประเภทพารามิเตอร์ชนิดเท่านั้นที่สามารถเป็นตัวแทนของประเภทอ้างอิงไม่ได้เป็นชนิดดั้งเดิม (เช่น int, คู่, ถ่าน, ฯลฯ )
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการที่จะใช้วิธีการทั่วไปองค์ประกอบสตริงพิมพ์ที่แตกต่างกัน
public class GenericMethodTest { // 泛型方法 printArray public static < E > void printArray( E[] inputArray ) { // 输出数组元素 for ( E element : inputArray ){ System.out.printf( "%s ", element ); } System.out.println(); } public static void main( String args[] ) { // 创建不同类型数组: Integer, Double 和 Character Integer[] intArray = { 1, 2, 3, 4, 5 }; Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "整型数组元素为:" ); printArray( intArray ); // 传递一个整型数组 System.out.println( "\n双精度型数组元素为:" ); printArray( doubleArray ); // 传递一个双精度型数组 System.out.println( "\n字符型数组元素为:" ); printArray( charArray ); // 传递一个字符型数组 } }
รวบรวมโค้ดข้างต้นผลมีดังนี้
整型数组元素为: 1 2 3 4 5 双精度型数组元素为: 1.1 2.2 3.3 4.4 字符型数组元素为: H E L L O
มีตัวแปรประเภทกระโดด:
อาจมีบางครั้งที่คุณต้องการจะ จำกัด บุคคลที่ได้รับอนุญาตให้ผ่านไปยังพารามิเตอร์ชนิดชนิดของช่วงชนิด ตัวอย่างเช่นวิธีดิจิตอลของการดำเนินการอาจจะเป็นเพียงต้องการที่จะยอมรับกรณีของหรือหมายเลข subclasses นี่คือจุดประสงค์ของพารามิเตอร์ชนิดล้อมรอบ
เพื่อประกาศพารามิเตอร์ชนิดขอบเขตชื่อพารามิเตอร์ชนิดที่เป็น บริษัท จดทะเบียนแรกตามด้วยคำหลักขยายที่สุดตามขอบเขตบนของมัน
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึง "ขยาย" วิธีการที่ใช้ในความหมายความหมายทั่วไป "ขยาย" (หมวดหมู่) หรือ "การดำเนินการ" (Interface) ตัวอย่างของวิธีการทั่วไปผลตอบแทนสูงสุดสามวัตถุเทียบเคียง
public class MaximumTest { // 比较三个值并返回最大值 public static <T extends Comparable<T>> T maximum(T x, T y, T z) { T max = x; // 假设x是初始最大值 if ( y.compareTo( max ) > 0 ){ max = y; //y 更大 } if ( z.compareTo( max ) > 0 ){ max = z; // 现在 z 更大 } return max; // 返回最大对象 } public static void main( String args[] ) { System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n", 3, 4, 5, maximum( 3, 4, 5 ) ); System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n", 6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) ); System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear", "apple", "orange", maximum( "pear", "apple", "orange" ) ); } }
รวบรวมโค้ดข้างต้นผลมีดังนี้
3, 4 和 5 中最大的数为 5 6.6, 8.8 和 7.7 中最大的数为 8.8 pear, apple 和 orange 中最大的数为 pear
ระดับทั่วไป
ประกาศที่คล้ายกันและงบของชั้นไม่ใช่ทั่วไปของชั้นทั่วไปที่นอกเหนือไปจากชื่อชั้นผนวกส่วนการประกาศประเภทพารามิเตอร์
และวิธีการทั่วไปทั่วไปประเภทระดับส่วนการประกาศพารามิเตอร์ยังมีหนึ่งหรือมากกว่าหนึ่งชนิดพารามิเตอร์คั่นด้วยเครื่องหมายจุลภาคระหว่างพารามิเตอร์ พารามิเตอร์ทั่วไปยังเป็นที่รู้จักเป็นตัวระบุตัวแปรประเภทจะใช้ในการระบุชื่อของประเภททั่วไป เพราะพวกเขายอมรับหนึ่งหรือมากกว่าหนึ่งพารามิเตอร์ชั้นเรียนเหล่านี้จะเรียกว่าเรียนแปรหรือชนิดแปร
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการที่เรากำหนดระดับทั่วไป:
public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box<String>(); integerBox.add(new Integer(10)); stringBox.add(new String("本教程")); System.out.printf("整型值为 :%d\n\n", integerBox.get()); System.out.printf("字符串为 :%s\n", stringBox.get()); } }
รวบรวมโค้ดข้างต้นผลมีดังนี้
整型值为 :10 字符串为 :本教程