2012-03-01 1 views
2

Я пытаюсь найти способ включить что-то похожее на Closure в Java 1.6, так как я разрабатываю для Android.Закрытие на Java или что-то в этом роде

Что я хочу (в идеальном мире) У меня есть класс, мы назовем его «Предмет».

У меня тогда есть массив.

ArrayList<Item> items = new ArrayList<item>; 

В каждом из них items.get (х) Я хочу, чтобы сохранить блок кода, который будет выполняться при вызове. Этот блок кода должен иметь место в рамках класса, в котором хранятся элементы ArrayList.

Моей единственной, полураздутой идеей было бы создать методы в классе, в котором размещались «элементы», и сохранить имя функции в каждом из экземпляров «item», а затем использовать отражение, чтобы вызвать эти методы. ..

Я очень сомневаюсь, что это возможно, но это то место, где я найду ответ в любом случае.

Спасибо заранее за любую помощь.

+1

Это не ответ, но вы могли бы хотеть иметь прочитайте статью [John Skeet] (http://csharpindepth.com/articles/chapter5/closures.aspx), она также охватывает Java (до Java 7). –

ответ

9

Что вам нужно, это интерфейс, как

interface Closure{ 
    public void exec(); 
} 

и создать анонимный класс для каждого «закрытия» код, который вы хотите

Closure closure = new Closure() { 
    public void exec(){ 
     // code here 
    } 
} 
+0

Хммм, я пытаюсь понять, как это будет работать, я думаю, что я немного замедлился. Итак, в классе «Элементы» я бы определил анонимный класс? Разве это не ограничивало бы сферу применения только этим экземпляром элемента? – JoeyG

+0

um, если вы хотите определить анонимный класс в 'Item', вы можете изменить' exec' подпись для принятия ввода и вызвать 'exec' с тем, что вы хотите передать. – Chikei

+0

Ну, есть проблема для меня, я хочу, чтобы эти блоки кода могли обращаться к переменным, находящимся в классе, в котором находится массив List. Поэтому мне понадобится код, который будет называться определенным в этом классе жилья, но сохранен в классе элемента. Я чувствую, что слишком много спрашиваю. haha – JoeyG

Смежные вопросы