9 featureใหม่ใน Java 9

หลังจาก Java 8 release ได้ 3 ปี กำหนดการ release Java 9 คือ 21 กันยายน 2560 นอกเหนือจากระบบ module ที่เป็นของใหม่และมีการพูดถึงมากที่สุดแล้ว ก็ยังมีหัวข้ออื่นๆอีก รวมเป็น 9 ข้อด้วยกัน

  1. ระบบ module: ถูกออกแบบมาเพื่อแก้ปัญหา spaghetti code เพราะระบบเดิมจะมองที่ class dependencies และ method classifier เป็นหลัก ไม่สามารถจะมองเป็น module (หรือในที่นี้อาจจะหมายถึง JAR) ได้ อีกปัญหาหนึ่งก็คือการที่มี class ที่ทำงานเหมือนๆกันอยู่บน Classpath ซึ่งไม่อาจมองเห็นได้ง่ายๆ ระบบ module จะมีคำสั่งหลักๆเพิ่มเติมคือ
    • requires: ระบุ dependency modules
    • exports: ระบุ package ที่สามารถเรียกใช้ได้จาก module อื่นๆ package ที่ไม่ถูก exports ก็จะไม่สามารถนำไปใช้ภายนอก module ได้
  2. Link: ในบางระบบอาจไม่จำเป็นที่จะต้องใช้ JRE ทั้งตัว แต่ในแง่การ deploy ไม่สามารถทำได้ ใน Java 9 ได้เพิ่ม jlink ซึ่งเป็น tool ที่สามารถเลือกเฉพาะ module ที่จำเป็นเพื่อลดขนาดของ Runtime environment ได้
  3. JShell: รองรับ REPL (Read-Eval-Print-Loop) เพื่อทดลอง API หรือเรียกคำสั่งโดยไม่ต้องสร้าง class เพื่อ compile ได้
  4. ปรับปรุง Javadoc: เพิ่ม search box ให้ค้นหาได้จาก Javadoc เอง และ content รองรับ HTML5
  5. Collection factory methods: การเพิ่มค่าให้กับ Collection ใน version ก่อนๆจะต้องสร้าง instance ก่อน แล้วจึงเรียกคำสั่ง add ทีละ element ใน Java 9 ได้เพิ่ม static method of(…) โดยสามารถใส่ค่าเริ่มต้นไปพร้อมๆกับการสร้าง object ขึ้นมาเลย เช่น List.of(1, 2, 3);
  6. ปรับปรุง Stream API: เพิ่มความสามารถให้กับ API โดยเพิ่ม dropWhile, takeWhile, ofNullable และเพิ่มให้ตัวแปร Optional สามารถใช้งาน stream ได้ด้วย
  7. ประกาศ private method ใน interface: Java 8 ได้เพิ่ม default method ให้มี implementation ได้ แต่ถ้าเกิดเหตุการณ์ที่มี default method หลายๆตัวที่ทำงานคล้ายๆกัน เราจะไม่สามารถ refactor ออกมาเป็น method ที่ไม่ต้องการ expose ออกไปภายนอกได้ Java 9 จึงเพิ่ม feature นี้มาเพื่อให้เป็น method ที่ถูกเรียกโดย default method ได้เท่านั้น
  8. HTTP/2: เพิ่ม class HttpClient ซึ่งถูกวางให้ใช้งานแทน HttpURLConnection ซึ่งรองรับเทคโนโลยีทั้ง WebSocket และ HTTP/2 แต่ API จะยังอยู่ในกลุ่ม incubator module ซึ่งจะยังมีการปรับเปลี่ยน signature ภายในได้อยู่
  9. Multi-release JAR: การทำ library ให้ backward compatible นั้น ทำให้เราไม่สามารถใช้กลุ่มคำสั่งที่มีใน Java รุ่นใหม่ๆ จนกว่าจะแน่ใจว่า client ได้เปลี่ยนมาใช้ตัวล่าสุดแล้วได้ โดย Multi-release JAR จะทำให้ผู้พัฒนาสามารถเพิ่ม class ที่ทำงานเหมือนๆกันให้ทำงานกับ Java ในแต่ละ version ได้ ส่วนถ้าใช้งานกับ Java version ต่ำกว่า 9 จะไม่ได้รับผลกระทบ เพราะระบบจะมองเห็นแค่ class ใน directory ด้านนอกเท่านั้น ตัวอย่างโครงสร้างภายใน JAR จะเป็นดังนี้
multirelease.jar
├── META-INF
│   └── versions
│       └── 9
│           └── multirelease
│               └── Helper.class
├── multirelease
    ├── Helper.class
    └── Main.class

ที่มา:

สแลช (SLASH)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s