لینوکس، عشق، برنامه نویسی

لینوکس، عشق، برنامه نویسی

در این وبلاگ مطالبی درباره سیستم عامل لینوکس و همچنین درمورد برنامه نویسی و کامپیوتر مینویسم.

سلام

در این پست میخام درباره ی ایونت هندلینگ در جاوا با استفاده از Anonymous class توضیحاتی بدم.

 

به قطعه کد زیر نگاه کنید.

 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

public class Main {

        public static void main(String[] args) {
     
                JButton btn = new JButton();

                btn.addActionListener( new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {

                                System.out.println("Hello World!");
                            }
                    });
            }
    }
 

 

همه ی ما می دونیم که اینترفیس در جاوا قابل نمونه سازی (instantiation) نیست. یعنی از یک اینترفیس نمی توانیم با استفاده از کلیدواژه new  یک آبجکت بسازیم. 

 

به عبارت دیگر چنین چیزی در جاوا ممکن نیست

 
 ActionListener object = new ActionListener();   //اکشن لیسنر یک اینترفیس هست

 


و همچنین می دانیم که اگر یک متغیر از نوع اینترفیس ایجاد کردیم، تنها مقداری که میتواند داخل آن متغیر قرار بگیرد، یک آبجکت از کلاسی است که حتما آن اینترفیس را پیاده سازی (implement) کرده باشد. به عبارت دیگر، کد زیر در جاوا کاملا ممکن است (به شرطی که myClass حتما ActionListener رو implement کرده باشد)

 
 ActionListener object = new myClass(); 
 

 

اما اگر به کدی که در ابتدای این پست نوشتم نگاه کنید می بینید که با استفاده از new از اینترفیس ActionListener یک آبجکت ساخته شده!  چطور چنین چیزی ممکنه؟frown

 

در جواب باید گفت که کلید واژه ی new در واقع از اینترفیس آبجکت نساخته، بلکه یک Anonymous class ساخته که این Anonymous class اکشن لیسنر رو implement کردهsmiley

 

سینتکسش خیلی عجیبه نه؟ برای من هم خیلی عجیبهlaugh ولی چه میشه کرد، سازندگان جاوا اینجوری ساختنش.

 

در نگاه اول شاید برای برنامه نویسان تازه کار کمی گیج کننده باشه و اینطور فکر کنن که new مربوط به ActionListener هست، ولی ما در جاوا مفهومی داریم به نام Anonymous class یا کلاس ناشناس

 

میخام کد بالا رو یه مقدار ساده تر بنویسم.

 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

public class Main {

        public static void main(String[] args) {

                ActionListener myListener = new ActionListener() {

                        public void actionPerformed(ActionEvent e) {

                                System.out.println("Hello World!");
                            }
                    };

                JButton btn = new JButton();
                btn.addActionListener(myListener);

            }
    }
 


این کد در واقع همون کد بالایی هست ولی یه مقدار ساده تر نوشته شده. اینجا هم ما یک Anonymous class داریم که همزمان هم کلاس تعریف شده و هم ActionListener رو implement کرده، و هم یک آبجکت ازش ساخته شده و داخل متغیر myListener قرار گرفتهsmiley

 

اگر بخوام باز هم کد بالایی رو ساده تر بنویسم، میشه اینجوری (دقت کنید که کد پایینی معتبر نیست و اجرا نمیشه و فقط برای درک بهتر شما اینجوری نوشتم)

 
 ActionListener myListener = new myClass implements ActionListener { 

       public void actionPerformed(ActionEvent e) { 

          System.out.println("Hello World!"); 
       }
 };

 

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

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی