Директива Java Inner-Class, реализованная с помощью конструктора параметров? - PullRequest
2 голосов
/ 29 октября 2009

обычно я реализую свои Runnables следующим образом (непосредственно реализованный внутренний класс):

Runnable updateRunnable = new Runnable() {

    public void run() { 
    }
}

Есть ли в Java какой-либо способ реализации класса путем передачи каких-либо параметров в конструктор следующим образом?

Runnable updateRunnable = new Runnable(locale) {

    Locale locale = null;

    public Runnable(Locale locale){
        this.locale = locale
    }

    public void run() { 
    }
};

==> Моя цель - иметь непосредственно реализованный внутренний класс, но я хочу передать параметр.

Какое лучшее решение для этого (приведенный выше пример, кажется, не работает ????) Является ли единственная возможность работать с установщиками-получателями или, альтернативно, реализовать класс как "нормальный" внутренний класс (который не является директивой) реализована).

Большое спасибо! Январе

Ответы [ 2 ]

5 голосов
/ 29 октября 2009

Вы можете сделать что-то похожее:

final Locale locale;
Runnable r = new Runnable() {
    public void run() {
        // have direct access to variable 'locale'
    }
};

Важно отметить, что Locale, который вы передаете, должен быть final, чтобы вы могли это сделать.

Вы должны как-то инициализировать locale для компиляции.

2 голосов
/ 29 октября 2009

Другой вариант - использовать статический внутренний класс.

public class MyClass {

    public void someMethod() {
         Runnable runnable = new MyRunnable(someLocaleHere);
    }

    private static class MyRunnable implements Runnable {
         Locale locale = null;

         private MyRunnable(Locale locale) {
             this.locale = locale;
         }

         public void run() {
         }
    }
}

В зависимости от того, как вы смотрите на вещи, недостатком этого подхода является то, что MyRunnable не может получить доступ к конечной локальной переменной, как и другой метод, описанный здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...