Java Runnable Вопрос - PullRequest
       18

Java Runnable Вопрос

5 голосов
/ 29 ноября 2010

В настоящее время я прохожу курс по Java и наткнулся на какой-то запутанный код

Пример:

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

Я не совсем понимаю, что делает этот код.

Как метод run можно связать с экземпляром класса?

Я погуглил "Runnable" и обнаружил, что это интерфейс. Реализую ли я интерфейс, объявив метод run в фигурных скобках? Можно ли это сделать для любого интерфейса в Java?

Я мог бы использовать некоторые ссылки / объяснения. Спасибо!

Ответы [ 4 ]

8 голосов
/ 29 ноября 2010

Это анонимный внутренний класс , который реализует интерфейс Runnable.Да, вы можете реализовать любой интерфейс таким способом, хотя есть причины, по которым вы бы это сделали или не сделали в любом конкретном случае (отсутствие возможности повторного использования, которое является значительным в столбце «не будет»).Подробнее об анонимных классах здесь , но это в основном удобная форма этого:

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

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

... при условии Foo является внутренним (или "вложенным") учебный класс.Подробнее о вложенных классах здесь .

2 голосов
/ 29 ноября 2010

Я погуглил "Runnable" и узнал что это интерфейс. Я реализуя интерфейс объявив метод запуска между фигурными скобки ? Можно ли это сделать для любого интерфейс в Java?

Да!

Этот код создает экземпляр объекта, который реализует Runnable. Поскольку мы не можем фактически создать интерфейс, любой код, который пытается это сделать, должен предоставлять реализации для методов интерфейса в фигурных скобках. На самом деле мы не видим, какой класс Java создает для реализации Runnable (это абстрактные термины).

Если вы должны были сделать следующее:

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

вы бы увидели "Я бегу" как ваш вывод.

2 голосов
/ 29 ноября 2010

да, вы реализуете интерфейс, объявив прогон.Да, это может быть сделано для любого интерфейса.

Обычно это делается, когда вы передаете реализацию методу, который ожидает аргумент типа интерфейса, и у вас нет объявленного класса, который подходит.Вы можете просто реализовать интерфейс на месте, и этот код работает.Довольно аккуратно.

0 голосов
/ 25 декабря 2010

В некоторых случаях этот пример кода будет полезен .... 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");
            }
        }

    }
...