سؤال

أنا حاليًا في جافا وقد واجهت بعض التعليمات البرمجية المربكة.

مثال:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                //doStuff
            }
        };

لا أحصل على ما يفعله هذا الرمز.

كيف يمكن أن ترتبط طريقة التشغيل بمثيل من الفصل؟

لقد غوغل "Runnable" واكتشفت أنها واجهة. هل أقوم بتنفيذ الواجهة بإعلان طريقة التشغيل بين قوسين مجعد؟ هل يمكن القيام بذلك لأي واجهة في جافا؟

يمكنني استخدام بعض الروابط/التفسيرات. شكرًا لك!

هل كانت مفيدة؟

المحلول

انه فئة داخلية مجهولة هذا ينفذ الواجهة Runnable. نعم ، يمكنك تنفيذ أي واجهة بهذه الطريقة ، على الرغم من أن هناك أسبابًا لتكوين أو لا تفعل في أي حالة معينة (قلة قابلية إعادة الاستخدام كونها كبيرة في العمود "لن"). المزيد عن الطبقات المجهولة هنا, ، ولكنها في الأساس شكل مناسب من هذا:

// Define it
class Foo implements Runnable
{
    public void run()
    {
        // Do stuff
    }
}

// And then use it
Runnable runnable = new Foo();

...قدمت Foo هو فئة داخلية (أو "متداخلة"). المزيد عن الطبقات المتداخلة هنا.

نصائح أخرى

نعم ، أنت تقوم بتنفيذ الواجهة بإعلان التشغيل. نعم يمكن القيام به لأي واجهة.

يتم ذلك عادةً عند نقل التنفيذ إلى طريقة تتوقع وسيطة لنوع الواجهة ، وليس لديك فئة معلنة مناسبة. يمكنك فقط تنفيذ الواجهة على الفور ، ويتم تشغيل هذا الرمز. أنيق جدا.

لقد غوغل "Runnable" واكتشفت أنها واجهة. هل أقوم بتنفيذ الواجهة بإعلان طريقة التشغيل بين قوسين مجعد؟ هل يمكن القيام بذلك لأي واجهة في جافا؟

نعم!

يقوم هذا الرمز بتثبيت كائن يقوم بتنفيذ Runnable. نظرًا لأننا لا نستطيع بالفعل إنشاء واجهة ، فإن أي رمز يحاول القيام بذلك يجب أن يوفر تطبيقات لطرق الواجهة بين قوسين مجعد. لا نتعرف حقًا على الفئة التي تنشئها Java لتنفيذ Runnable (هذه مصطلحات مجردة).

إذا كنت ستفعل ما يلي:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                System.out.println("I'm running");
            }
        };
runnable.run();

سترى "أنا أركض" كإخراجك.

في بعض الحالة ، سيكون رمز العينة هذا مفيدًا .... test runna = new test()

class test implements Runnable{
        test(){
            Thread t = new Thread(this);
            t.start();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true){
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.print("asd");
            }
        }

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top