کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

متد پیش فرض در Java 8

متدهای پیش فرض در Java 8

Java 8 مفهوم جدید پیاده سازی متد پیش فرض را در رابط ها وارد کرده است. این قابلیت برای سازگاری وارونه اضافه شده است. به گونه ای که از رابط های قدیمی بتوان جهت افزایش قابلیت عبارت لامبدا Java 8 استفاده کرد. برای مثال رابط های ‘List’ یا ‘Collection’ دارای اعلان متد ‘forEach’ نیستند. به همین دلیل اضافه کردن این متد باعث خرابی پیاده سازی های فریمورک کالکشن می شود. Java 8 متد پیش فرض را به گونه ای معرفی کرده است که رابط های لیست یا کالکشن بتوانند برای متد forEach یک پیاده سازی پیش فرض داشته باشند و کلاسی که در حال پیاده سازی این رابط ها است، نیازی به پیاده سازی این متد نداشته باشد.

public interface vehicle {
   default void print() {
      System.out.println("I am a vehicle!");
   }
}

پیش فرض های متعدد در Java 5

به کمک توابع پیش فرض موجود در رابط ها این امکان وجود دارد که یک کلاس به کمک متدهای پیش فرض یکسان، دو رابط را اجرا کند. در کد زیر واضح ترین مطلب بیان شده است.

 public interface vehicle {
   default void print() {
      System.out.println("I am a vehicle!");
   }
}
public interface fourWheeler {
   default void print() {
      System.out.println("I am a four wheeler!");
   }
}

اولین راه حل ایجاد یک متد own است تا پیاده سازی پیش فرض لغو شود.

public class car implements vehicle, fourWheeler {
   public void print() {
      System.out.println("I am a four wheeler car vehicle!");
   }
}

راه حل دوم فراخوانی متد پیش فرض رابط مشخص شده با استفاده از super است.

public class car implements vehicle, fourWheeler {
   default void print() {
      vehicle.super.print();
   }
}

متدهای پیش فرض ایستا در Java 8

یک رابط می تواند از Java 8 به این طرف متدهای کمکی ایستا نیز داشته باشد.

public interface vehicle {
   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}

مثالی برای متد پیش فرض در Java 8

با استفاده از یکی از ویرایشگرهای دلخواه خود، برنامه ی Javaی زیر را مثلا در C:\> JAVA ایجاد کنید.
Java8Tester.java

public class Java8Tester {
   public static void main(String args[]) {
      Vehicle vehicle = new Car();
      vehicle.print();
   }
}
interface Vehicle {
   default void print() {
      System.out.println("I am a vehicle!");
   }
	
   static void blowHorn() {
      System.out.println("Blowing horn!!!");
   }
}
interface FourWheeler {
   default void print() {
      System.out.println("I am a four wheeler!");
   }
}
class Car implements Vehicle, FourWheeler {
   public void print() {
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("I am a car!");
   }
}

نتیجه را بررسی کنید
با استفاده از کامپایلر javac این کلاس را مانند زیر کامپایل کنید.

C:\JAVA>javac Java8Tester.java

حالا مانند زیر Java8Tester را اجرا کنید.

C:\JAVA>java Java8Tester

نتیجه باید به صورت زیر نمایش داده شود.

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!

برای مطالعه سرفصل آموزش جاوا (J2SE) کلیک نمایید .


1397/10/25 1999 616
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...