JAVAPRO_IR Telegram 4446
📌 Anonymous Inner Class vs Lambda Expression

🔹 Anonymous Inner Class

* یک کلاس بی‌نام هست که یا یک اینترفیس رو پیاده‌سازی می‌کنه یا یک کلاس انتزاعی/معمولی رو extends می‌کنه.
* می‌تونه شامل state (فیلدها) و متدهای اضافی باشه.
* هربار که ساخته میشه، واقعاً یک کلاس جدید در بایت‌کد ایجاد میشه.


🔹 Lambda Expression

* از جاوا 8 معرفی شد.
* فقط می‌تونه برای Functional Interfaces (اینترفیس با یک متد مجرد) استفاده بشه.
* خودش کلاس جدید تولید نمی‌کنه، بلکه یک نمونه از اینترفیس تولید می‌کنه.
* سبک‌تر و خواناتر از Anonymous Class هست.


📖 مثال ۱: Anonymous Inner Class


interface Greeting {
void sayHello();
}

public class Main {
public static void main(String[] args) {
Greeting g = new Greeting() {
@Override
public void sayHello() {
System.out.println("Hello from Anonymous Class");
}
};
g.sayHello();
}
}


👉 اینجا یک کلاس بی‌نام ساخته شده که متد sayHello رو پیاده‌سازی کرده.


📖 مثال ۲: Lambda Expression


interface Greeting {
void sayHello();
}

public class Main {
public static void main(String[] args) {
Greeting g = () -> System.out.println("Hello from Lambda");
g.sayHello();
}
}


👉 همین منطق با کدی بسیار کوتاه‌تر پیاده‌سازی شد. در واقع نیازی به تعریف کلاس جدید نیست.


📖 تفاوت‌های کلیدی

1. محدودیت‌ها

* Anonymous Class می‌تونه چند متد داشته باشه (حتی متدهای اضافی).
* Lambda فقط برای Functional Interface هست.

2. ساختار بایت‌کد

* Anonymous Class یک کلاس جداگانه در فایل‌های بایت‌کد تولید می‌کنه.
* Lambda توسط JVM به شکل یک invokeDynamic ساخته میشه (کلاس واقعی ایجاد نمی‌کنه).

3. This keyword

* در Anonymous Class، this به نمونه‌ی Anonymous Class اشاره می‌کنه.
* در Lambda، this به نمونه‌ی کلاس بیرونی اشاره می‌کنه.


📖 مثال تفاوت this


interface Printer {
void print();
}

public class Main {
public void test() {
// Anonymous Inner Class
Printer p1 = new Printer() {
@Override
public void print() {
System.out.println(this.getClass().getName());
}
};
p1.print();

// Lambda
Printer p2 = () -> {
System.out.println(this.getClass().getName());
};
p2.print();
}

public static void main(String[] args) {
new Main().test();
}
}


👉 خروجی:

* در Anonymous Class: اسم یک کلاس بی‌نام چاپ میشه مثل Main$1.
* در Lambda: اسم کلاس بیرونی (`Main`) چاپ میشه.


جمع‌بندی

* Anonymous Class
انعطاف بیشتری داره، میشه چند متد نوشت و حتی از کلاس‌ها ارث‌بری کرد.
* Lambda
ساده‌تر، سبک‌تر و خواناتر هست، مخصوص Functional Interfaces.
* تفاوت this خیلی مهمه و توی طراحی تاثیر می‌ذاره.

#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro
6👍2



tgoop.com/javapro_ir/4446
Create:
Last Update:

📌 Anonymous Inner Class vs Lambda Expression

🔹 Anonymous Inner Class

* یک کلاس بی‌نام هست که یا یک اینترفیس رو پیاده‌سازی می‌کنه یا یک کلاس انتزاعی/معمولی رو extends می‌کنه.
* می‌تونه شامل state (فیلدها) و متدهای اضافی باشه.
* هربار که ساخته میشه، واقعاً یک کلاس جدید در بایت‌کد ایجاد میشه.


🔹 Lambda Expression

* از جاوا 8 معرفی شد.
* فقط می‌تونه برای Functional Interfaces (اینترفیس با یک متد مجرد) استفاده بشه.
* خودش کلاس جدید تولید نمی‌کنه، بلکه یک نمونه از اینترفیس تولید می‌کنه.
* سبک‌تر و خواناتر از Anonymous Class هست.


📖 مثال ۱: Anonymous Inner Class


interface Greeting {
void sayHello();
}

public class Main {
public static void main(String[] args) {
Greeting g = new Greeting() {
@Override
public void sayHello() {
System.out.println("Hello from Anonymous Class");
}
};
g.sayHello();
}
}


👉 اینجا یک کلاس بی‌نام ساخته شده که متد sayHello رو پیاده‌سازی کرده.


📖 مثال ۲: Lambda Expression


interface Greeting {
void sayHello();
}

public class Main {
public static void main(String[] args) {
Greeting g = () -> System.out.println("Hello from Lambda");
g.sayHello();
}
}


👉 همین منطق با کدی بسیار کوتاه‌تر پیاده‌سازی شد. در واقع نیازی به تعریف کلاس جدید نیست.


📖 تفاوت‌های کلیدی

1. محدودیت‌ها

* Anonymous Class می‌تونه چند متد داشته باشه (حتی متدهای اضافی).
* Lambda فقط برای Functional Interface هست.

2. ساختار بایت‌کد

* Anonymous Class یک کلاس جداگانه در فایل‌های بایت‌کد تولید می‌کنه.
* Lambda توسط JVM به شکل یک invokeDynamic ساخته میشه (کلاس واقعی ایجاد نمی‌کنه).

3. This keyword

* در Anonymous Class، this به نمونه‌ی Anonymous Class اشاره می‌کنه.
* در Lambda، this به نمونه‌ی کلاس بیرونی اشاره می‌کنه.


📖 مثال تفاوت this


interface Printer {
void print();
}

public class Main {
public void test() {
// Anonymous Inner Class
Printer p1 = new Printer() {
@Override
public void print() {
System.out.println(this.getClass().getName());
}
};
p1.print();

// Lambda
Printer p2 = () -> {
System.out.println(this.getClass().getName());
};
p2.print();
}

public static void main(String[] args) {
new Main().test();
}
}


👉 خروجی:

* در Anonymous Class: اسم یک کلاس بی‌نام چاپ میشه مثل Main$1.
* در Lambda: اسم کلاس بیرونی (`Main`) چاپ میشه.


جمع‌بندی

* Anonymous Class
انعطاف بیشتری داره، میشه چند متد نوشت و حتی از کلاس‌ها ارث‌بری کرد.
* Lambda
ساده‌تر، سبک‌تر و خواناتر هست، مخصوص Functional Interfaces.
* تفاوت this خیلی مهمه و توی طراحی تاثیر می‌ذاره.

#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro

BY برنامه نویسی جاوا | Java


Share with your friend now:
tgoop.com/javapro_ir/4446

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. The administrator of a telegram group, "Suck Channel," was sentenced to six years and six months in prison for seven counts of incitement yesterday. Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data.
from us


Telegram برنامه نویسی جاوا | Java
FROM American