Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ทำไมต้องมี private methods ใน interface ของ Java 9

Interface รองรับ default methods ตั้งแต่ Java 8 บางครั้ง default methods นี้มีโค้ดที่ซ้ำกันในหลายเมธอด ในกรณีนี้ สามารถเขียน default method อีกตัวหนึ่งเพื่อ code reusability แต่หาก common code เป็น confidential ไม่ควรวางใน default methods เพราะทุกคลาสที่ implement interface นั้นเข้าถึง default methods ทั้งหมดได้

Interface สามารถมี private methods ตั้งแต่ Java 9 เมธอดเหล่านี้มองเห็นได้เฉพาะภายใน class/interface เดียวกัน จึงแนะนำให้ใช้ private methods สำหรับ confidential code นั่นคือเหตุผลที่เพิ่ม private methods ใน interfaces

ไวยากรณ์

private void methodName() {
    // some statements/code
}

ตัวอย่างการใช้งาน

interface Operation {
    default void addition() {
        System.out.println("default method addition");
    }
    
    default void multiply() {
        division(); // เรียก private method
        System.out.println("default method multiply");
    }
    
    private void division() { // private method
        System.out.println("private method division");
    }
}

class PrivateMethodTest implements Operation {
    public static void main(String args[]) {
        PrivateMethodTest test = new PrivateMethodTest();
        test.multiply();
    }
}

ผลลัพธ์

private method division
default method multiply

Private Methods ใน Interface - สรุป

ประเภทเข้าถึงได้จากใช้สำหรับ
default methodImplementing classes, sub-interfacesDefault implementation, API
static methodInterface name (Interface.staticMethod())Utility methods, factories
private methodภายใน interface เดียวกันเท่านั้นHelper code, shared logic, confidential
private static methodภายใน interface เดียวกันเท่านั้นStatic helper, shared logic

ข้อดี

  • Encapsulation: ซ่อน implementation details
  • Code reuse: แชร์โค้ดระหว่าง default/static methods
  • Security: ไม่เปิดเผย logic ภายในให้ implementing classes
  • Maintenance: แก้ไขที่เดียว ใช้ได้หลายที่

Private methods ใน interface ทำให้ default methods สะอาดขึ้น แยก interface contract ออกจาก implementation details