Latest web development tutorials
×

Java หลักสูตร

Java หลักสูตร Java แนะนำโดยย่อ Java การกำหนดค่าการพัฒนาสภาพแวดล้อม Java พื้นฐานไวยากรณ์ Java วัตถุและการเรียน Java ชนิดข้อมูลพื้นฐาน Java ประเภทตัวแปร Java การปรับเปลี่ยน Java ผู้ประกอบการ Java โครงสร้างห่วง Java สาขาโครงสร้าง Java Number หมวดหมู่ Java Character หมวดหมู่ Java String หมวดหมู่ Java StringBuffer Java แถว Java วันที่เวลา Java นิพจน์ปกติ Java ทาง Java Stream,File,IO Java Scanner หมวดหมู่ Java การจัดการข้อยกเว้น

Java เชิงวัตถุ

Java สืบทอด Java Override/Overload Java polymorphism Java ระดับนามธรรม Java บรรจุภัณฑ์ Java อินเตอร์เฟซ Java บรรจุภัณฑ์

Java การสอนที่ทันสมัย

Java โครงสร้างข้อมูล Java คอลเลกชันกรอบ Java ยาชื่อสามัญ Java การทำให้เป็นอันดับ Java เขียนโปรแกรมเครือข่าย Java ส่ง Email Java การเขียนโปรแกรมแบบมัลติเธรด Java Appletรากฐาน Java เอกสารความคิดเห็น Java ตัวอย่าง Java 8 คุณสมบัติใหม่ Java MySQL สัมพันธ์

Java Generics

generics Java (generics) เป็นคุณลักษณะใหม่ที่นำมาใช้ใน JDK 5 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

字符串为 :本教程