xtend怎么使用

今天,我决定向Xtend打个招呼。 我希望学习一些新的编程语言。 选择一个标准的清单并不多。

  • 它必须是在JVM上运行的编程语言,
  • 如果我不需要学习用于建筑应用的全新生态系统,那就太好了。

我检查了几个选项。 JVM的编程语言列表已不多了,但在我决定要选择以下语言时:Groovy,Scala和Xtend。 在和我已经选择Xtend。

Scala不能很好地适合我的标准,另一方面,符合我的条件的常规做法却是Xtend之后我将学习的下一门编程语言。 很难解释为什么我选择Xtend。 我什至不认为Xtend是一种编程语言,它更像是扩展,但这是我的看法。

什么是Xtend

因此,这里有一些关于该语言的词。 有关更多信息,请访问Xtend网页。 这是一种美观而简单的语言,可以使Java现代化。 Xtend代替了编译后的字节码,而是转换成漂亮的Java类,这使其适用于不使用字节码的平台(如GWT)。 正如我已经提到的,用Xtend编写的代码产生Java类,因此在使用任何现有Java框架时都没有限制。 该语言是使用Xtext创建的,因此它已经准备好了Eclipse,并且有该语言的maven插件,因此在Eclipse中使用它不会有问题。

学习

学习Xtend并不难。 Java中目前缺少一些语法更改和一些新的语义概念。 与其他编程语言相比,没有什么革命性的东西,Xtend只是用新功能扩展了Java,它将允许您创建更好,更短的类。 我最关注的功能是闭包,lambda表达式和扩展。 这些东西使您可以创建一个非常好的构建器类。 您可以轻松创建UI Builders API,这将使您可以创建更简单的视图(不是在功能范围内,而是在代码理解的范围内)。

参与Xtend

我已经提到Xtend是使用Xtext构建的,这意味着eclipse已经能够正确处理Xtend语言。 创建新的Xtend类后,如果您不使用maven获取依赖项,则eclipse会抱怨缺少的lib,并建议您将它们添加到类路径中。 这篇博客文章的目的是展示Xtend如何改善构建UI的方式。我已经找到了JavaFX,GWT的不错的示例……但是我没有找到Vaadin的任何东西,因此我决定构建一个简单的类来构建Vaadin UI。 或者更确切地说只是其中的一部分。 以下示例尚未完全实现,它只能构建UI的一部分,但可以轻松扩展。

Vaadins UI是用Java编写的命令式UI的示例。 构建UI的过程类似于GWT或SWT中构建命令式UI的过程。 这是一个简单的示例,其外观如下:

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的典型实现,我的目标是使其变得更容易阅读。 为此,我将从构建器类开始。

制作UI Builder API

为了更好地创建UI,我将首先创建一个组件构建器。 这不是构建器模式的标准实现,就像我们可以在纯Java中那样。 实际上,我们正在构建扩展类。 此类包含扩展方法,这些扩展方法将使用新方法扩展现有的类。 这是该类的实现。

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 }}

单独的builder类不能做很多事情,它具有基本的功能,例如构建窗口,添加各种面板和按钮,并且如果您熟悉Vaadin的话,您知道框架中内置了很多组件。 构建器中的几乎所有方法都有两个参数。 第一个参数代表将处理新组件的容器类,第二个参数是闭包,它将包含用于组件初始化的代码。

制作UI

以下代码段中的代码说明了如何使用构建器类来构建Vaadin UI。 类主体中的第一行包括ComponentBuilder作为扩展。 强大的Xtend的lambda语法使代码看起来更简单易懂。 这样,我们消除了Java的内部类和许多纯Java代码中的样板代码。 有关Xtend Lambda表达式的更多信息,请参见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)}}

结论

因此,这是一种非常不错的语言,学习过程只需几个小时。 文档写得很好,主要的语言概念显示在大约50页中。 几个小时后,您就可以准备改善您的应用程序了。 这就是Java的外观。 简而言之,与Xtend一起玩很有趣,值得花时间。

参考:在Igor Madjeric博客上,我们的JCG合作伙伴 Igor Madjeric 使用Xtend构建Vaadin UI 。

翻译自: https://www.javacodegeeks.com/2013/02/building-vaadin-ui-with-xtend.html

xtend怎么使用

xtend怎么使用_使用Xtend构建Vaadin UI相关推荐

  1. 使用Xtend构建Vaadin UI

    今天,我决定向Xtend打个招呼. 我希望学习一些新的编程语言. 选择一个标准的清单并不多. 它必须是在JVM上运行的编程语言, 如果我不需要学习用于建筑应用的全新生态系统,那就太好了. 我已经检查了 ...

  2. xtend怎么使用_Java替代Xtend又推出了另一个块摇摆更新

    xtend怎么使用 Xtend 2.7已着陆. 但是除了通常的错误修复,我们还能期待什么? 当然有一些漂亮的功能. 甚至更多:Xtend还在吹嘘一轮IDE性能改进. 同时,DSL框架Xtext还收到了 ...

  3. 密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码)

    密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码) 3.    AES实验 3)    (思考题)利用Sage构建AES的S盒和逆S盒 ...

  4. element ui 空格_空格是您的UI朋友。 大量使用它。

    element ui 空格 Originally published at marcandrew.me on July 30th, 2020. 最初于 2020 年7月30日 在 marcandrew ...

  5. pyqt 获取 UI 中组件_一起学Vue:UI框架(elementui)

    目标 使用Vue+ElementUI构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 效果页面 比如我们要实现这样列表.新增.编辑三个页面: 列表页面 新增页面 编辑页面 安装elem ...

  6. 第二部分:开发简要指南-第六章 使用Fragments构建动态UI

    第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用Fragment类 ...

  7. 从零开始--系统深入学习android(实践-让我们开始写代码-新手指南-6.使用Fragments构建动态UI)...

    第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用 Fragment ...

  8. 【JavaFx 构建ProAdmin UI界面】

    [JavaFx 构建ProAdmin UI界面] ProAdmin 原界面效果 这个版本的proAdmin 界面非常大气清爽,原界面设计已经无法找到,只能查到这一张图片而已,有原psd或资源的朋友可以 ...

  9. 机器学习特征构建_使用Streamlit构建您的基础机器学习Web应用

    机器学习特征构建 Data scientist and ML experts often find it difficult to showcase their findings/result to ...

最新文章

  1. Zuul Gateway 网关
  2. 马云马化腾李彦宏在IT峰会上的话-内容提炼
  3. spring cloud 路由
  4. OpenShift 4 - 在控制台中安装使用 Web Terminal
  5. 【个性化阅读】ZapTxt的提醒姗姗来迟
  6. java界面中加载图片,Java登录界面中添加背景图片,程序无错,但加载不了图片,求帮忙...
  7. 微波网络转移参量[A]表示阻抗矩阵[Z]和导纳矩阵[Y]
  8. android ios9 rom,安卓党也能用上IOS9了 奇兔刷机首发24款机型仿IOS9 ROM
  9. JWT实现接口双重认证,提供安全又不复杂的接口安全能力
  10. Gradle报 skkiped gradle skipped due to earlier error
  11. Cassandra在海量数据存储及大型项目案例介绍-part1
  12. 一台计算机怎样介绍自己,一台电脑的自我介绍作文
  13. 利用FPGA实现简单的CPU
  14. 【Android 屏幕适配】屏幕适配基础概念 ② ( 像素 px 与 密度无关像素 dip | 像素 px 与 密度无关像素 dip 在不同屏幕像素密度 dpi 下的换算关系 )
  15. c#语法糖模式匹配【switch 表达式】
  16. 计算机听评课会议记录,研修评课议课会议记录
  17. win10任务栏图标无法固定,也无法取消固定,
  18. NCBI上查看SNP位点在哪个基因座上(locus)
  19. AOSP 8.0 系统启动之四ART虚拟机启动(一)
  20. 02【ArcGIS Pro SDK for Microsoft .NET】开发实现登录页面

热门文章

  1. Spring MVC工作原理
  2. 部署shiro官方源码时,执行maven命令出错
  3. Spring入门(三)之IoC
  4. JDBC连接数据库教程,postgreSQL
  5. 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
  6. 中国有超级计算机的大学,计算机专业排名看超算实力,ASC竞赛五大高校排名,中山大学第一...
  7. vue 字典_【开源】基于Vue的前端组件库HeyUI
  8. 一文搞懂ThreadLocal及相关的内存泄露问题
  9. 如何用JS实现音乐播放、暂停
  10. jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?