คอมพิวเตอร์การเขียนโปรแกรม

Generics Java: คำอธิบายและวิธีการ

เริ่มต้นด้วยการปรากฏตัวของภาษา Java ที่มีระดับการเปลี่ยนแปลงมากซึ่งไม่ต้องสงสัยนำช่วงเวลาในเชิงบวกในการทำงานของ หนึ่งในการเปลี่ยนแปลงที่สำคัญเหล่านี้คือการแนะนำของ Java ทั่วไปหรือ generalizations ฟังก์ชั่นนี้ไม่เพียง แต่จะทำให้ภาษามีความยืดหยุ่นมากขึ้นและหลากหลาย แต่ยังมีความปลอดภัยในแง่ของการนำชนิดข้อมูล

ความจริงก็คือว่าก่อนที่จะมีการนำยาชื่อสามัญในชวารหัสทั่วไปอาจจะสร้างขึ้นไม่เพียง แต่ในแง่ของวัตถุชนิดการอ้างอิง การเชื่อมโยงดังกล่าวสามารถกำหนดวัตถุใด ๆ หลังจากที่ทุกชั้นเรียนใน Java เป็นทายาทระดับนัยวัตถุ อย่างไรก็ตามวิธีการนี้เป็นแหล่งที่มีศักยภาพของความผิดพลาดมากมายที่เกี่ยวข้องกับประเภทการรักษาความปลอดภัยในการแปลงที่ชัดเจนของวัตถุจากวัตถุชนิดเป้าหมาย เมื่อมีการใช้ภาพรวมบรรยากาศทั้งหมดจะดำเนินการโดยปริยายโดยอัตโนมัติและกำจัดแม้กระทั่งที่มีศักยภาพสำหรับข้อผิดพลาด

Generics Java: คำอธิบายและยกตัวอย่างเช่น

ขอให้เราพิจารณาตัวอย่างง่ายๆของการประยุกต์ใช้ทั่วไปในชั้นเรียนปกติในรูปด้านล่าง และดำเนินการตรวจสอบรายละเอียดของรายละเอียดปลีกย่อยทั้งหมดและความแตกต่างของ Java ทั่วไป

ให้ความสนใจกับวิธีการที่ประกาศคลาสเกิดขึ้นคู่ ทันทีหลังจากที่ชื่อชั้นวงเล็บมุมเปิดซึ่งระบุ T. ตัวอักษรมันเป็นชนิดของฟิลเลอร์ที่อยู่ในกระบวนการของการสร้างอินสแตนซ์ของคลาสนี้จะถูกแทนที่โดยประเภทที่เฉพาะเจาะจง มันมีลักษณะดังต่อไปนี้: คู่ obj = ใหม่คู่ () มันควรจะตั้งข้อสังเกตว่าแทนที่จะ T สามารถระบุตัวอักษรใด ๆ แต่เป็นกฎที่ใช้ T, V หรืออี

หมายเหตุ: การเริ่มต้นกับรุ่นที่แปดของ Java ระบุประเภทเป้าหมายเมื่อประกาศวงเล็บมุมอ้างอิงในตัวสร้างสามารถด้านซ้ายที่ว่างเปล่า ดังนั้นตัวอย่างเช่นสามารถเขียนใหม่ดังกล่าวข้างต้น: คู่ obj = คู่ใหม่ <> ()

เมื่อชั้นมีการประกาศในลักษณะดังกล่าวแล้วในร่างกายของเขาแทนการระบุชนิดของเขตข้อมูลการเชื่อมโยงวัตถุกลับโดยวิธีการที่คุณสามารถใช้ตัวอักษรที่ ตั้งแต่ T เมื่อมีการสร้างวัตถุชั้นจะถูกแทนที่ด้วยประเภทเฉพาะเขตข้อมูลครั้งแรกและครั้งที่สองในกรณีนี้จะเป็นชนิดจำนวนเต็ม

ต่อไปนี้ตรรกะของการขัดแย้งและ firstItem secondItem เรียกเพื่อสร้างที่เหมาะสมนอกจากนี้ยังต้องเป็นชนิดจำนวนเต็มหรือ subclass ถ้าคุณพยายามที่จะส่งชนิดข้อมูลที่แตกต่างจากสิ่งที่ถูกกำหนดเมื่อสร้างวัตถุคอมไพเลอร์จะไม่ยอมให้ความผิดพลาดนี้ ดังนั้นตัวสร้างข้อโต้แย้งเมื่อวัตถุจะเป็นดังนี้: คู่ obj = ใหม่คู่ <> (ใหม่จำนวนเต็ม (1), ใหม่จำนวนเต็ม (2)) เช่นเดียวกับข้อโต้แย้งและวิธีการ setFirst setSecond และเป็นคุณเดาได้อาจจะเป็นวิธีการ GetFirst getSecond และจะกลับมาเป็นค่าของชนิดจำนวนเต็ม

ทั่วไปประเภทชั้นหลายพารามิเตอร์

ในชั้นเรียนทั่วไปยังสามารถประกาศพารามิเตอร์หลายชนิดที่มีการตั้งค่าในวงเล็บมุมด้วยเครื่องหมายจุลภาค การออกแบบใหม่โดยกรณีระดับคู่จะนำเสนอด้านล่าง

ที่คุณสามารถดูเมื่อคุณสร้างอินสแตนซ์ของคลาสนี้ในวงเล็บมุมควรจะระบุหมายเลขเดียวกันของประเภทเป็นพารามิเตอร์ หากคุณมีความคุ้นเคยกับประเภทของโครงสร้างข้อมูลเป็นแผนที่นี้คุณจะเห็นว่ามันใช้ว่าหลักการเดียวกัน มีอาร์กิวเมนต์แรกระบุชนิดของคีย์และสอง - ประเภทของค่า มันควรจะตั้งข้อสังเกตว่าประเภทของการส่งเมื่อมีข้อโต้แย้งวัตถุอาจทับซ้อน ยกตัวอย่างเช่นการโฆษณาต่อไปเช่นชั้นคู่เป็นอย่างถูกต้อง: คู่ obj

คุณสมบัติบางอย่างของภาพรวม

ก่อนที่จะไปต่อไปก็ควรจะตั้งข้อสังเกตว่าคอมไพเลอร์ Java ไม่สร้างรุ่นที่แตกต่างของชั้นจับคู่ ในความเป็นจริงในขั้นตอนของการรวบรวมประเภททั่วไปข้อมูลทั้งหมดจะถูกลบ แต่คุณนำประเภทที่เหมาะสม, การสร้างรุ่นพิเศษของชนชั้นคู่ อย่างไรก็ตามในโปรแกรมยังคงมีเพียงรุ่นทั่วไปของชั้นเรียน กระบวนการนี้เรียกว่าในชวาประเภททำความสะอาดทั่วไป

หมายเหตุ: จุดสำคัญ เชื่อมโยงไปยังรุ่นที่แตกต่างของชนชั้นทั่วไปเดียวกัน Java ไม่สามารถชี้ไปที่หนึ่งและวัตถุเดียวกัน นั่นคือสมมติว่าเรามีสองการเชื่อมโยง: คู่ obj1 และคู่ <ดับเบิล> obj2 ดังนั้นในสาย obj1 = obj2 ข้อผิดพลาด แม้ว่าทั้งสองตัวแปรเป็นประเภทคู่ วัตถุที่พวกเขาดูมีความแตกต่างกัน นี้เป็นตัวอย่างที่สำคัญของประเภทของความปลอดภัยใน Java ทั่วไป

ข้อ จำกัด ในการเรียนทั่วไป

มันเป็นสิ่งสำคัญที่จะรู้ว่าภาพรวมสามารถนำมาใช้กับประเภทของการอ้างอิงที่มีการส่งผ่านพารามิเตอร์อาร์กิวเมนต์คลาสจาวาทั่วไปจะต้องเป็นประเภทระดับ ประเภทเหล่านี้ง่ายเช่นเช่นคู่หรือยาวไม่สามารถโอน ในคำอื่น ๆ บรรทัดต่อไปนี้คู่ประกาศคลาสไม่ได้รับอนุญาต: คู่ obj อย่างไรก็ตามข้อ จำกัด นี้ไม่ได้เป็นปัญหาร้ายแรงที่มีความสอดคล้องกันชั้น Java เสื้อคลุมสำหรับแต่ละชนิดดั้งเดิม พูดอย่างเคร่งครัดถ้าคู่ระดับที่คุณต้องการแค็ปซูลเป็นจำนวนเต็มและบูลีนมูลค่า avtoupakovka ทำทุกอย่างสำหรับคุณ: คู่ <จำนวนเต็มแบบบูล> obj = ใหม่คู่ <> (25 จริง)

อีกข้อ จำกัด ที่ร้ายแรงคือไม่สามารถที่จะสร้างตัวอย่างของพารามิเตอร์ชนิดที่ ยกตัวอย่างเช่นบรรทัดต่อไปนี้จะทำให้เกิดการรวบรวมข้อผิดพลาด: T แรก = T () ใหม่ นี้เป็นที่ชัดเจนเพราะคุณไม่ทราบล่วงหน้าว่าข้อโต้แย้งผ่านระดับเต็มหรือนามธรรมหรือแม้กระทั่งการติดต่อ เดียวกันจะไปสำหรับการสร้างอาร์เรย์

ประเภท จำกัด

ค่อนข้างบ่อยมีสถานการณ์เมื่อมันเป็นสิ่งจำเป็นที่จะ จำกัด รายการประเภทที่สามารถส่งผ่านเป็นอาร์กิวเมนต์ชวาคลาทั่วไปนั้น ขอให้เราคิดว่าในคู่ชั้นเรียนของเราเราต้องการที่จะแค็ปซูเฉพาะค่าตัวเลขสำหรับการดำเนินการทางคณิตศาสตร์เพิ่มเติมเกี่ยวกับพวกเขา การทำเช่นนี้เราจำเป็นต้องกำหนดขีด จำกัด บนของประเภทพารามิเตอร์ มันเป็นที่รู้โดยใช้วิธีการโฆษณา superclass รับมรดกขัดแย้งทั้งหมดที่ผ่านมาในวงเล็บมุม ก็จะมีลักษณะดังนี้ระดับคู่ ในลักษณะนี้คอมไพเลอร์พบว่าแทนของพารามิเตอร์ T สามารถทดแทนหรือระดับจำนวนหรือหนึ่ง subclasses ของมัน

นี่คือการต้อนรับที่พบบ่อย ข้อ จำกัด ดังกล่าวมักจะใช้เพื่อให้พารามิเตอร์ชนิดเข้ากันได้ในหนึ่งและระดับเดียวกัน ลองพิจารณาตัวอย่างในชั้นเรียนคู่ของเรา: ชั้นคู่ ที่นี่เราบอกคอมไพเลอร์ที่ว่า T ประเภทสามารถ arbitrary และ V ชนิดต้องเป็นชนิด T หรือหนึ่ง subclasses ของมัน

จำกัด "ด้านล่าง" คือตรงทางเดียวกัน แต่แทนที่จะคำขยายการสะกดคำซุปเปอร์ ว่าชั้นจะจัดคู่ บอกว่าแทนที่จะ T อาจใช้แทนหรือ ArrayList หรือระดับใด ๆ หรืออินเตอร์เฟซที่จะสืบทอด

Java วิธีการทั่วไปและการก่อสร้าง

ใน Java generalizations สามารถนำมาใช้ไม่เพียง แต่จะเรียน แต่ยังมีวิธีการ ตัวอย่างเช่นวิธีการทั่วไปสามารถประกาศในห้องเรียนปกติ

เท่าที่เห็นในรูปด้านบนวิธีการโฆษณาทั่วไปคือไม่มีเรื่องใหญ่ เพียงพอก่อนที่จะพิมพ์กลับของวิธีการที่จะนำวงเล็บมุมและระบุชนิดพารามิเตอร์ในพวกเขา

หากทุกอย่างจะทำคล้าย ๆ กับสร้าง:

วงเล็บมุมในกรณีนี้ใส่ก่อนชื่อของนักออกแบบเพราะเขามีค่าตอบแทนใด ๆ ผลของโปรแกรมทั้งสองจะได้รับ:

จำนวนเต็ม

เชือก

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 th.delachieve.com. Theme powered by WordPress.