xtend怎么使用_使用Xtend构建Vaadin UI
xtend怎么使用
今天,我決定向Xtend打個(gè)招呼。 我希望學(xué)習(xí)一些新的編程語言。 選擇一個(gè)標(biāo)準(zhǔn)的清單并不多。
- 它必須是在JVM上運(yùn)行的編程語言,
- 如果我不需要學(xué)習(xí)用于建筑應(yīng)用的全新生態(tài)系統(tǒng),那就太好了。
我檢查了幾個(gè)選項(xiàng)。 JVM的編程語言列表已不多了,但在我決定要選擇以下語言時(shí):Groovy,Scala和Xtend。 在和我已經(jīng)選擇Xtend。
Scala不能很好地適合我的標(biāo)準(zhǔn),另一方面,符合我的條件的常規(guī)做法卻是Xtend之后我將學(xué)習(xí)的下一門編程語言。 很難解釋為什么我選擇Xtend。 我什至不認(rèn)為Xtend是一種編程語言,它更像是擴(kuò)展,但這是我的看法。
什么是Xtend
因此,這里有一些關(guān)于該語言的詞。 有關(guān)更多信息,請(qǐng)?jiān)L問Xtend網(wǎng)頁。 這是一種美觀而簡(jiǎn)單的語言,可以使Java現(xiàn)代化。 Xtend代替了編譯后的字節(jié)碼,而是轉(zhuǎn)換成漂亮的Java類,這使其適用于不使用字節(jié)碼的平臺(tái)(如GWT)。 正如我已經(jīng)提到的,用Xtend編寫的代碼產(chǎn)生Java類,因此在使用任何現(xiàn)有Java框架時(shí)都沒有限制。 該語言是使用Xtext創(chuàng)建的,因此它已經(jīng)準(zhǔn)備好了Eclipse,并且有該語言的maven插件,因此在Eclipse中使用它不會(huì)有問題。
學(xué)習(xí)
學(xué)習(xí)Xtend并不難。 Java中目前缺少一些語法更改和一些新的語義概念。 與其他編程語言相比,沒有什么革命性的東西,Xtend只是用新功能擴(kuò)展了Java,它將允許您創(chuàng)建更好,更短的類。 我最關(guān)注的功能是閉包,lambda表達(dá)式和擴(kuò)展。 這些東西使您可以創(chuàng)建一個(gè)非常好的構(gòu)建器類。 您可以輕松創(chuàng)建UI Builders API,這將使您可以創(chuàng)建更簡(jiǎn)單的視圖(不是在功能范圍內(nèi),而是在代碼理解的范圍內(nèi))。
參與Xtend
我已經(jīng)提到Xtend是使用Xtext構(gòu)建的,這意味著eclipse已經(jīng)能夠正確處理Xtend語言。 創(chuàng)建新的Xtend類后,如果您不使用maven獲取依賴項(xiàng),則eclipse會(huì)抱怨缺少的lib,并建議您將它們添加到類路徑中。 這篇博客文章的目的是展示Xtend如何改善構(gòu)建UI的方式。我已經(jīng)找到了JavaFX,GWT的不錯(cuò)的示例……但是我沒有找到Vaadin的任何東西,因此我決定構(gòu)建一個(gè)簡(jiǎn)單的類來構(gòu)建Vaadin UI。 或者更確切地說只是其中的一部分。 以下示例尚未完全實(shí)現(xiàn),它只能構(gòu)建UI的一部分,但可以輕松擴(kuò)展。
Vaadins UI是用Java編寫的命令式UI的示例。 構(gòu)建UI的過程類似于GWT或SWT中構(gòu)建命令式UI的過程。 這是一個(gè)簡(jiǎn)單的示例,其外觀如下:
package org.pis.web.application;import org.eclipse.xtext.xbase.lib.InputOutput;import com.vaadin.Application; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Panel; import com.vaadin.ui.Window;@SuppressWarnings("serial") public class MainWindow extends Application {public void init() {Window main = new Window();HorizontalLayout hl = new HorizontalLayout();Panel panel = new Panel();final Button button = new Button("First button");button.addListener( new ClickListener() {@Overridepublic void buttonClick(ClickEvent event) {sayHello("Hello First Button");button.setCaption("First button clicked");}});panel.addComponent(button);Button button2 = new Button("Second button");button2.addListener(new ClickListener() {@Overridepublic void buttonClick(ClickEvent event) {sayHello("Hello Second Button");}});main.addComponent(hl);setMainWindow(main);}public void sayHello(final String string) {InputOutput.<String> println(string);} }上面的示例是Vaadin UI的典型實(shí)現(xiàn),我的目標(biāo)是使其變得更容易閱讀。 為此,我將從構(gòu)建器類開始。
制作UI Builder API
為了更好地創(chuàng)建UI,我將首先創(chuàng)建一個(gè)組件構(gòu)建器。 這不是構(gòu)建器模式的標(biāo)準(zhǔn)實(shí)現(xiàn),就像我們可以在純Java中那樣。 實(shí)際上,我們正在構(gòu)建擴(kuò)展類。 此類包含擴(kuò)展方法,這些擴(kuò)展方法將使用新方法擴(kuò)展現(xiàn)有的類。 這是該類的實(shí)現(xiàn)。
package org.pis.web.applicationimport com.vaadin.ui.Window import com.vaadin.ui.Button import com.vaadin.ui.Panel import com.vaadin.ui.HorizontalLayout import com.vaadin.ui.ComponentContainerclass ComponentBuilder{def window ( (Window) => void initializer){new Window().init(initializer)}def panel( ComponentContainer it, (Panel) => void initializer){val panel = new Panel().init(initializer)it.addComponent(panel)return panel}def horizontalLayout (ComponentContainer it, (HorizontalLayout) => void initializer){val hl = new HorizontalLayout().init(initializer)it.addComponent(hl);return hl}def button ( ComponentContainer it, (Button)=> void initializer){println('Button in panel creation')val that = new Button().init(initializer);it.addComponent(that);return that}def private <T> T init(T obj, (T) => void init){init?.apply(obj)return obj }}單獨(dú)的builder類不能做很多事情,它具有基本的功能,例如構(gòu)建窗口,添加各種面板和按鈕,并且如果您熟悉Vaadin的話,您知道框架中內(nèi)置了很多組件。 構(gòu)建器中的幾乎所有方法都有兩個(gè)參數(shù)。 第一個(gè)參數(shù)代表將處理新組件的容器類,第二個(gè)參數(shù)是閉包,它將包含用于組件初始化的代碼。
制作UI
以下代碼段中的代碼說明了如何使用構(gòu)建器類來構(gòu)建Vaadin UI。 類主體中的第一行包括ComponentBuilder作為擴(kuò)展。 強(qiáng)大的Xtend的lambda語法使代碼看起來更簡(jiǎn)單易懂。 這樣,我們消除了Java的內(nèi)部類和許多純Java代碼中的樣板代碼。 有關(guān)Xtend Lambda表達(dá)式的更多信息,請(qǐng)參見Xtend的文檔。
package org.pis.web.applicationimport com.vaadin.Application import com.vaadin.ui.Buttonclass MainWindowXtend extends Application{extension ComponentBuilder = new ComponentBuilderoverride init() { mainWindow = window[horizontalLayout[panel[button[caption = "First button"it.addListener()[sayHello('Hello First Button');component as Buttoncomponent.caption = 'First button clicked']]button[caption = "Second button"it.addListener()[sayHello('Hello');]]]]]; }def void sayHello(String string) { println(string)}}結(jié)論
因此,這是一種非常不錯(cuò)的語言,學(xué)習(xí)過程只需幾個(gè)小時(shí)。 文檔寫得很好,主要的語言概念顯示在大約50頁中。 幾個(gè)小時(shí)后,您就可以準(zhǔn)備改善您的應(yīng)用程序了。 這就是Java的外觀。 簡(jiǎn)而言之,與Xtend一起玩很有趣,值得花時(shí)間。
參考:在Igor Madjeric博客上,我們的JCG合作伙伴 Igor Madjeric 使用Xtend構(gòu)建Vaadin UI 。
翻譯自: https://www.javacodegeeks.com/2013/02/building-vaadin-ui-with-xtend.html
xtend怎么使用
總結(jié)
以上是生活随笔為你收集整理的xtend怎么使用_使用Xtend构建Vaadin UI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: airpods连接ipad教程(airp
- 下一篇: win10d电脑任务栏不显示任务怎么办?