나는 작은 라이브러리를 디자인하고 때때로 몇 줄을 쓴다. 그리고 그것은 옳다고 느끼지 않는다. 그래서 나는 실험 된 자바 프로그래머의 의견/조언을 얻고 싶다.자바가 조언을 필요로한다
필자는 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
을
하지만이 코드는 누군가 자신의 이벤트를 구현하려는 경우 기본적으로 전체 청취자 arraylist (CopyOnWriteArraylist)에 액세스해야하며 논리를 반복해서 작성해야하기 때문에이 코드는 잘못되었습니다.
그래서 내가 선택한 것은 "fire"라는 단일 메서드가 포함 된 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 패키지를 가져 오지 않고 사용하고 JRE7에서 작동하는 경우 궁금한 점은 Java 8의 람다 식에 관한 것입니다.
JDK8을 사용하면 결국 코드를보다 명확하게 만들 수 있습니다.
도움 주셔서 감사합니다.
lambdas : no에 대한 질문으로 컴파일러와 VM뿐 아니라 라이브러리도 변경해야합니다. 실행하려면 JRE 8이 필요합니다. –
하지만이 질문을하는 다른 사람들에게도이 사실을 알고 있습니다. 실제로 자바 5 - 7에 대한 람다 식의 백 포트가 있습니다. http://blog.orfjackal.net/2013/07/lambda-expressions- backported-to-java-7.html –