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: |

Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. Those being doxxed include outgoing Chief Executive Carrie Lam Cheng Yuet-ngor, Chung and police assistant commissioner Joe Chan Tung, who heads police's cyber security and technology crime bureau. 1What is Telegram Channels?
from us


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