Я проектирую небольшую библиотеку, и иногда я пишу пару строк, и это просто не кажется правильным, поэтому я хотел бы получить мнения/советы экспериментального Java-программиста.Советы по Java
Ive получил слушатель, который обрабатывать 3 Differents события и в одном из моего класса я реализовать методы, которые на самом деле огонь.Пушку событий
Так что я сделал в первом был что-то вроде этого:
protected final void fireOperationStarted(){
OperationEvent event = new OperationEvent(this);
for (OperationListener listener : listeners) {
listener.operationStarted(event);
}
}
protected final void fireOperationEnded(){
OperationEvent event = new OperationEvent(this);
for (OperationListener listener : listeners) {
listener.operationEnded(event);
}
//omitted the 3rd method on purpose
, но этот код был ошибочным, потому что, если кто-то хочет реализовать свое собственное событие, ему в основном понадобится доступ к всем слушателям (CopyOnWriteArraylist) и снова и снова писать логику.
Так что я выбрал интерфейс Fireable с единственным методом «огонь». И это то, что я сделал:
protected final void fireOperationStarted(){
fireOperation(new Fireable(){
@Override
public void fire(OperationListener listener, OperationEvent event) {
listener.operationStarted(event);
}
});
}
protected final void fireOperationEnded(){
fireOperation(new Fireable(){
@Override
public void fire(OperationListener listener, OperationEvent event) {
listener.operationEnded(event);
}
});
}
protected void fireOperation(Fireable fireable){
OperationEvent event = new OperationEvent(this);
for (OperationListener listener : listeners) {
fireable.fire(listener, event);
}
}
Я хотел бы получить ваше мнение, я лично думаю, что его лучше, чем первая реализация даже есть еще много шаблонного кода. Может быть, есть лучший способ сделать это? Я посмотрел в исходном коде пакета java.awt.events, чтобы узнать, как они имеют дело с несколькими событиями и как они запускают их, но это кажется слишком сложным для моих нужд.
Одна вещь, о которой мне было интересно, также относится к выражению лямбда в Java 8, если я использую их без импорта каких-либо пакетов Java 8 и компиляции, будет ли она работать на JRE7?
Может быть здорово использовать JDK8, чтобы в конечном итоге улучшить мои коды.
Благодарим за помощь!
На ваш вопрос о lambdas: нет, их реализация включает в себя изменения в компиляторе и на виртуальной машине, а также в библиотеках. Для их выполнения вам понадобится JRE 8. –
Но - я знаю вас это, но для других людей, которые посещают этот вопрос - на самом деле теперь есть backport лямбда-выражений для Java 5-7: http://blog.orfjackal.net/2013/07/lambda-expressions- портированном к Java-7.html –