JavaRush /จาวาบล็อก /Random-TH /10 คุณสมบัติ Java 8 ที่คุณไม่เคยได้ยินมาก่อน
Vash_the_Stampede
ระดับ

10 คุณสมบัติ Java 8 ที่คุณไม่เคยได้ยินมาก่อน

เผยแพร่ในกลุ่ม
แลมบ์ดา แลมบ์ดา แลมบ์ดา นั่นคือทั้งหมดที่คุณได้ยินเมื่อมีคนพูดถึง Java 8 แต่นั่นเป็นเพียงส่วนหนึ่งเท่านั้น Java 8 มีคุณสมบัติใหม่มากมาย - คลาสและสำนวนใหม่ที่ทรงพลัง และคุณสมบัติอื่นๆ ที่ควรจะมีตั้งแต่เริ่มต้น ฉันอยากจะก้าวไปสู่คุณสมบัติใหม่สิบประการที่ฉันมองว่าเป็นอัญมณีเล็กๆ น้อยๆ ที่ควรค่าแก่การรู้อย่างแน่นอน คงมีอย่างน้อยหนึ่งหรือสองอย่างที่คุณอยากลอง มาเริ่มกันเลย! 1) วิธีการเริ่มต้น ใหม่ในภาษา Java คุณสามารถเพิ่มเนื้อความของวิธีการให้กับอินเทอร์เฟซได้แล้ว ( วิธีการเริ่มต้น ) วิธีการเหล่านี้จะถูกเพิ่มโดยไม่มีเงื่อนไขให้กับคลาสทั้งหมดที่ใช้อินเทอร์เฟซเหล่านี้ สิ่งนี้เปิดโอกาสให้คุณเพิ่มฟังก์ชันการทำงานใหม่ให้กับไลบรารีที่มีอยู่โดยไม่ทำลายโค้ดเก่า นั่นเป็นข้อดีอย่างแน่นอน ในทางกลับกัน มันทำให้เส้นแบ่งระหว่างอินเทอร์เฟซพร่าเลือนอย่างจริงจัง ซึ่งบังคับให้ปฏิบัติตามเงื่อนไขบางประการเป็นแบบแผน และคลาสที่ตามมาเป็นการใช้งานส่วนตัว สำหรับมือขวา (ขวา) นี่อาจเป็นวิธีที่ยอดเยี่ยมในการทำให้อินเทอร์เฟซฉลาดขึ้น หลีกเลี่ยงการทำซ้ำ และขยายไลบรารี อยู่ในมือที่ไม่ดี ในไม่ช้าเราจะเห็นวิธีการในส่วนต่อประสานที่เรียกสิ่งนี้และแปลงเป็นประเภทที่เป็นรูปธรรม Brrr.... 2) การหยุดกระบวนการ การเริ่มต้นกระบวนการเพิ่มเติมเป็นสิ่งหนึ่งที่คุณทำเพียงครึ่งเดียวโดยรู้ว่าคุณจะกลับมา (แก้ไขจุดบกพร่อง) เพื่อแก้ไขจุดบกพร่องเมื่อกระบวนการ (แคร็ก) (ขัดข้อง) ล้มเลิก (แฮงค์) แฮงค์ หรือใช้ CPU 100% ขณะนี้คลาสกระบวนการได้รับการติดตั้งสองวิธีใหม่เพื่อช่วยคุณควบคุมกระบวนการที่ไม่เกะกะ ประการแรก isAlive()ช่วยให้คุณสามารถตรวจสอบได้อย่างง่ายดายว่ากระบวนการกำลังทำงานอยู่หรือไม่โดยไม่ต้องรอ อย่างที่สองและมีประสิทธิภาพมากกว่า (คำเตือน!) คือ destroyForcively()ซึ่งช่วยให้คุณ (ไร้ยางอาย) (ฆ่า) หยุดกระบวนการที่เกินเวลา (รอหรืออย่างอื่น) อย่างไร้ยางอายอย่างมีกำลัง หรือไม่จำเป็นอีกต่อไป 3) ประทับตราล็อค ตอนนี้สำหรับสิ่งที่น่าตื่นเต้นจริงๆ ไม่มีใครชอบที่จะซิงค์รหัส นี่เป็นวิธีที่แน่นอนในการชะลอประสิทธิภาพของแอปพลิเคชันของคุณ (โดยเฉพาะอย่างยิ่งในขนาดใหญ่) หรือแย่กว่านั้นคือทำให้แอปพลิเคชันค้าง แต่บางครั้งคุณก็ไม่มีทางเลือก มีสำนวนมากมายสำหรับการซิงโครไนซ์การเข้าถึงทรัพยากรแบบมัลติเธรด หนึ่งในที่ต้องการมากที่สุดคือ ReadWriteLock และการใช้งานที่เกี่ยวข้อง สำนวนนี้ช่วยลดความขัดแย้งโดยอนุญาตให้หลายเธรดใช้ทรัพยากรในขณะที่บล็อกเฉพาะเธรดที่จัดการมัน ฟังดูดี แต่ในทางปฏิบัติการล็อคนี้ ช้า มาก โดยเฉพาะอย่างยิ่งเมื่อมีเธรดการเขียนจำนวนมาก สิ่งนี้กลายเป็นเรื่องแย่มากที่ Java 8 เปิดตัว RWLock ใหม่ที่เรียกว่า StampedLock การล็อกนี้ไม่เพียงแต่เร็วขึ้นเท่านั้น แต่ยังนำเสนอ API ที่มีประสิทธิภาพสำหรับการล็อกในแง่ดี ซึ่งคุณสามารถรับการล็อกการอ่านได้ในราคาที่ต่ำ โดยหวังว่าจะไม่มีการดำเนินการเป็นลายลักษณ์อักษรเกิดขึ้นในระหว่างส่วนสำคัญของโค้ด ในตอนท้ายของส่วน คุณจะถามล็อคว่าการบันทึกเกิดขึ้นในช่วงเวลานั้นหรือไม่ ซึ่งในกรณีนี้ คุณสามารถตัดสินใจได้ว่าจะลองอีกครั้ง ยกระดับการล็อค หรือยอมแพ้ ล็อคนี้เป็นเครื่องมือที่ทรงพลังและสมควรได้รับการโพสต์เกี่ยวกับตัวมันเอง ฉันตื่นเต้นมากกับของเล่นใหม่นี้ ยอดเยี่ยม! นอกจากนี้คุณสามารถอ่านได้ ที่นี่ . 4) เครื่องบันทึกการแข่งขัน นี่เป็นอีกหนึ่งอัญมณีเล็กๆ น้อยๆ สำหรับทุกคนที่ใช้งานแอปพลิเคชันแบบมัลติเธรด API ใหม่ที่เรียบง่ายและมีประสิทธิภาพสำหรับการอ่านและเขียนตัวนับจากหลายเธรด บางครั้งอาจเร็วกว่าการใช้ AtomicIntegers ด้วยซ้ำ เจ๋งมาก! 5) ค่าทางเลือก (หรือทางเลือก) โอ้ พอยน์เตอร์ null เป็นเรื่องที่น่าปวดหัวสำหรับนักพัฒนา Java ทุกคน บางทีอาจเป็นที่นิยมมากที่สุดในบรรดาข้อยกเว้นทั้งหมด แต่ก็มีมาตั้งแต่ยุคแรกๆ อย่างน้อย ก็ตั้งแต่ ปี 1965 Java 8 ยืมมาจาก Scala และ Haskell มีรูปแบบใหม่ที่เรียกว่า Optional สำหรับการตัดการอ้างอิงที่อาจเป็นค่าว่างได้ นี่ไม่ใช่สัญลักษณ์แสดงหัวข้อย่อยสีเงินที่จะกำจัดค่า Null แต่เป็นวิธีสำหรับนักออกแบบ API ที่จะระบุที่ระดับโค้ด (แทนที่จะเป็นเอกสารประกอบ) ว่าค่า Null สามารถส่งคืนหรือส่งผ่านไปยังเมธอดได้ และผู้เรียกจะต้อง เตรียมตัวให้พร้อม ดังนั้นการดำเนินการนี้จะใช้ได้กับ API ใหม่เท่านั้น โดยมีเงื่อนไขว่าผู้เรียกไม่อนุญาตให้มีการอ้างอิงหลุดออกจาก Wrapper ซึ่งอาจถูกยกเลิกการอ้างอิงอย่างไม่ปลอดภัย ฉันต้องบอกว่าฉันค่อนข้างสับสนเกี่ยวกับฟีเจอร์นี้ ในแง่หนึ่ง ค่าว่างยังคงเป็นปัญหาใหญ่ ดังนั้นฉันขอขอบคุณทุกสิ่งที่เราทำเพื่อแก้ไขปัญหานี้ ในทางกลับกัน ฉันค่อนข้างสงสัยว่าสิ่งนี้จะประสบความสำเร็จ เนื่องจากการใช้ตัวเลือกเสริมต้องใช้ความพยายามอย่างต่อเนื่องจากทั้งบริษัทและมีผลกระทบในทันทีเพียงเล็กน้อย หากไม่มีการบังคับใช้อย่างเข้มงวด มีโอกาสที่รถจะอยู่ทางด้านซ้ายของถนน อ่านเพิ่มเติมเกี่ยวกับตัวเลือก 6) ใส่คำอธิบายประกอบทุกอย่าง ความก้าวหน้าเล็กๆ อีกประการหนึ่งของภาษา Java: คุณสามารถเพิ่มคำอธิบายประกอบลง ในเกือบทุกอย่างในโค้ดของคุณได้ ก่อนหน้านี้สามารถเพิ่มคำอธิบายประกอบลงในสิ่งต่างๆ เช่น การประกาศคลาสหรือเมธอดเท่านั้น ตั้งแต่ Java 8 คุณสามารถเพิ่มคำอธิบายประกอบในการประกาศตัวแปรและพารามิเตอร์ได้ เมื่อส่งค่าเป็นประเภทเฉพาะ หรือแม้แต่จัดสรรอ็อบเจ็กต์ใหม่ นี่เป็นส่วนหนึ่งของความพยายามที่เข้มข้น (พร้อมกับการปรับปรุงเครื่องมือ JavaDoc และ API) เพื่อทำให้ภาษาเป็นมิตรกับเครื่องมือวิเคราะห์และการวัดแบบคงที่มากขึ้น (เช่น FindBugs) นี่เป็นคุณสมบัติที่ดี แต่เช่นเดียวกับ involveDynamicที่เปิดตัวใน Java 7 คุณค่าที่แท้จริงของมันจะขึ้นอยู่กับว่าสังคมทำอะไรกับมัน 7) การดำเนินการล้น ต่อไปนี้เป็น ชุดของวิธีการซึ่งควรจะเป็นส่วนหนึ่งของไลบรารีหลักตั้งแต่วันแรก งานอดิเรกที่ฉันชอบคือการดีบั๊กตัวเลขโอเวอร์โฟลว์เมื่อ ints เกิน 2^32 และดำเนินการสร้างข้อผิดพลาดที่น่ารังเกียจที่สุดและไม่คาดคิดที่สุด (เช่น "ทำไมฉันถึงได้ค่าแปลกๆ นี้มาบนโลกนี้ล่ะ") ขอย้ำอีกครั้งว่าไม่มีสัญลักษณ์แสดงหัวข้อย่อยสีเงิน แต่มีฟังก์ชันมากมายสำหรับจัดการตัวเลขที่โยนออกมาเมื่อมันล้นในลักษณะที่ให้อภัยน้อยกว่าโอเปอเรเตอร์ +/* มาตรฐานของคุณ ซึ่งล้นอย่างไม่มีเงื่อนไข 8) เดินผ่านแค็ตตาล็อก การวนซ้ำเนื้อหาของแผนผังไดเร็กทอรีเป็นหนึ่งในสิ่งที่ผู้คนใช้ Google ค้นหามานานแล้ว (ในกรณีนี้ คุณอาจได้รับคำแนะนำให้ใช้ Apache.FileUtils) Java 8 ช่วยให้ คลาส Filesมีการปรับโฉมใหม่ด้วยวิธีการใหม่สิบวิธี สิ่งที่ฉันชอบคือ walk()ซึ่งสร้างเธรดแบบขี้เกียจ (สำคัญสำหรับระบบไฟล์ขนาดใหญ่) เพื่อวนซ้ำเนื้อหาของโครงสร้างไดเร็กทอรี 9) การสร้างแบบสุ่มที่แข็งแกร่ง ในปัจจุบันมีการพูดถึงเรื่องช่องโหว่ของรหัสผ่านและกุญแจต่างๆ มากมาย การรักษาความปลอดภัยของซอฟต์แวร์เป็นธุรกิจที่ซับซ้อนและมีแนวโน้มที่จะเกิดข้อผิดพลาด นั่นเป็นเหตุผลที่ฉันชอบวิธี SecureRandom ใหม่ getinstanceStrong()ซึ่งจะเลือกตัวสร้างแบบสุ่มที่แข็งแกร่งที่สุดสำหรับ Java Virtual Machine โดยอัตโนมัติ ซึ่งจะช่วยลดโอกาสที่คุณจะล้มเหลวหรือมีตัวสร้างที่อ่อนแอ ซึ่งจะทำให้คีย์และค่าที่เข้ารหัสเสี่ยงต่อการแฮ็กมากขึ้น 10. Date.toInstant() Java 8 แนะนำ API ใหม่ที่สมบูรณ์สำหรับ วันที่และเวลา สิ่งนี้ค่อนข้างเข้าใจได้เนื่องจากสิ่งที่มีอยู่ไม่ดีนัก Joda มุ่งสู่ Java API เพื่อหาวันที่และเวลามาหลายปีแล้ว อย่างไรก็ตาม แม้จะมี API ใหม่ แต่ปัญหาใหญ่อย่างหนึ่งยังคงอยู่ - มีโค้ดและไลบรารีมากมายที่ใช้ API เก่า และเราทุกคนรู้ว่าพวกเขาอยู่ที่นี่เพื่ออยู่ต่อ แล้วคุณจะทำอย่างไร? เพื่อให้บรรลุเป้าหมายนี้ Java 8 ได้ทำบางสิ่งที่ค่อนข้างหรูหราด้วยการเพิ่มวิธีการใหม่ให้กับคลาส Date ที่เรียกว่า toInstant()ซึ่งจะแปลงเป็น API ใหม่ ซึ่งจะทำให้คุณสามารถข้ามไปยัง API ใหม่ได้อย่างรวดเร็ว แม้ว่าจะทำงานกับโค้ดที่ใช้ API วันที่เก่าก็ตาม (และจะดำเนินการต่อไปในอนาคตอันใกล้)
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION