綁定屬性究竟是什麼?對我來說,他們似乎是使用EventObjects的事件類型安全版本 - 對event.getPropertyName()使用字符串相等檢查似乎有點弱。爲什麼使用javabean綁定的屬性而不是事件?
爲什麼你會用另一個呢?
綁定屬性究竟是什麼?對我來說,他們似乎是使用EventObjects的事件類型安全版本 - 對event.getPropertyName()使用字符串相等檢查似乎有點弱。爲什麼使用javabean綁定的屬性而不是事件?
爲什麼你會用另一個呢?
Java Beans的重點在於系統(特別是GUI Builder)可以檢查Java Bean並在沒有任何此組件的情況下對其進行配置。
雖然這相當酷,但它只在這種特定情況下才有用,現在這些註釋會更好。
因此,他們使用綁定屬性的原因僅僅是爲了支持這種插入式GUI組件技術,除非需要支持反射式gui構建系統,否則我不會更喜歡它。
響應@Mike齧齒動物
比方說,你讓你的用戶創建一個類,您將控制。這個班有一個「主」,可以處理幾個事件。
通常你有你的用戶做這樣的事情:
class UserClass(someClass) { void mainMethod() { someClass.addEventListener(new EventListener() { public void eventsHappen(Event e){ event1(e) } } } someClass.addDifferentEventListener(new DifferentEventListener() { public void eventsHappen(DifferentEvent e){ event2(e) } } } } public void event1(Event e) { //java code for event 1 } public void event2(DifferentEvent e) { // java code for event 2 } }
無論如何,你的想法。當然,你認爲這個類是在某處註冊的 - 可能是在xml/config文件中。你讀它,實例化它並執行mainMethod(由協議或接口定義),它自己註冊並開始調用事件處理程序。
現在,這裏是你如何能做到用註解同一件事:(您可能認識的格局 - 這幾乎是Junit的是如何詮釋測試。)
class UserClass() { @Event1 void event1Method(Event e) { event1's code } @Event2 void event2Method(AnotherEvent e) { event2's code } }
這是更爲直剛愎和去除大部分的樣板,並且它也消除了對協議或界面的需求,註釋更加清晰地定義和獨立。 (如果你關心的是傳遞給方法的參數,你實際上甚至不需要事件註釋,但是龍就是在這個大方向上)。
您仍然需要在某處註冊的類,但是這次您只需掃描每種方法以查找事件註釋並自行註冊它們。由於只有幾行代碼才能讀取和處理類,所以爲什麼要限制這種模式進行單元測試?
我發現的另一件事情非常整潔,我將這種模式用於「插入」到我的Java程序中的Groovy類。由於我正在編譯給定目錄中的所有類,因此掃描註釋很簡單。對用戶的影響是他插入(或編輯)正確註釋的常規文本文件,我的代碼立即編譯,集成並開始調用他們的事件處理程序。
JavaBeans是一個規範。它將綁定屬性定義爲其修改導致發出通知的綁定屬性,並且PropertyChangeEvent是受制裁的通知實體。
所以推測的JavaBeans-spec bean編輯器應該監聽PropertyChangeEvents。除了需要使用該規範之外,我自己也不會使用它。
我認爲JavaBeans規範的設計考慮了通用對象處理。例如,將JavaBean放入IDE中並使用可視化屬性編輯器進行配置。在這種情況下,IDE將使用一般的PropertyChangeEvent等。
或者如果你想從一個bean複製同等命名的屬性到另一個......這是bean使用(BeanUtils類)的另一種情況。但是,如果你打算做某些具體的事情,就像Noel Ang說的那樣,我建議你打字強。
我對你關於註釋的評論很感興趣:你可以給一個鏈接或者簡單地解釋一下注釋可以如何用於事件處理? – 2012-11-11 10:39:06