vaadin_混合Vaadin和Scala(略带Maven)

vaadin

人们谁是熟悉我的文章,知道我感兴趣的Vaadin(见“走得更远”部分下面的斯卡拉因为两者),也最近可以提高生产力。

环境准备

因此,很自然地,我试图将两者的精华相结合,以此作为一种体验。 作为附加挑战,我还尝试将Maven添加到组合中。 它没有我希望的那么成功,但是结论很有趣(至少对我而言)。

在上一篇文章中 ,我已经展示了如何在Eclipse中创建Scala项目,因此这确实是一件容易的事。 但是,在此基础上将Maven分层比较棘手。 当然将scala库添加到了依赖项列表中,但是我没有找到如何使Maven编译Scala代码,以便每个Eclipse保存都可以进行编译(就像Java一样)。 我找到了Scala Tools提供的maven-scala-plugin 。 但是,我无法使用它对m2eclipse感到满意。 忘记Maven插件了...基本上,我所做的就是创建Maven项目,然后使用m2eclipse从Maven更新Eclipse配置,最后添加Scala构建器:不是很干净而且非常脆弱,因为任何更新都会覆盖Eclipse文件。 如果有人知道“正确”的方法,我将不知所措!

开发时间

现在到问题的核心:我只想要一个文本字段和一个按钮,当按下该按钮时,将显示该字段的内容。 很简单? 并不是的。 我遇到的第一个问题是在Scala中创建按钮单击侦听器的实现。 在Vaadin中,侦听器接口具有单个方法void buttonClick(Button.ClickEvent event) 。 注意到事件的类型吗? 它是Button的内部类,无法在Scala中导入! 任何有解决方案的人都欢迎前来讲述。

面对这一限制,我决定将侦听器和事件类封装在两个标准Java类中,每个标准Java类中一个。 为了脱钩,更不用说简化生活了,我创建了一个父POM项目和两个模块,一个模块用于Java解决方法类,另一个模块用于实际应用程序。

下一个障碍也与Scala相关,并且由于我这一方面的知识不足。 我是一个Java男孩,因此,为了传递Class实例,我习惯于编写如下内容:

eventRouter.addListenerVisibleClickEvent.class,this,"displayMessage")

Scala似乎对此并不满意,并拒绝编译以前的代码。 该消息是“预期的标识符,但找到了'类别'”。 正确的语法是:

eventRouter.addListener(classOf[VisibleClickEvent],this,"displayMessage")

此外,在开发过程中,我编写了一种Java转换方式:

getWindow().showNotification(button.getCaption()+" "+(String)field.getValue())

我的朋友Scala大声抱怨“对象字符串不是值”,我像这样纠正了代码:

getWindow().showNotification(button.getCaption()+" "+field.getValue().asInstanceOf[String])

精明的读者应该指出,连接字符串使此强制转换变得不必要,我很高兴最后将其删除。

结论

最后,它花费的时间比我用Java完成示例所需的时间还要多。

  • 当然,部分时间上的浪费是由于我缺乏Scala知识所致。
  • 但是,由于要访问内部类的额外代码,我不确定Java中的代码行数会减少。
  • 实际上,我很肯定使用Java而不是Scala可以简化该项目(一个项目而不是父项目和2个模块)。

我问我自己的问题是,如果Scala无法扩展Java内部类-毫无疑问,API应该在这种约束下发展吗? 为了实现简洁的设计,内部类真的是必需的吗?还是仅是一些用得很少的好用的内部类?

在所有情况下,想要在Scala中对Vaadin应用程序进行编码的开发人员都应在投入使用之前格外小心,并准备降低生产率,使其低于Java,因为Vaadin组件类中有许多内部类。

您可以在这里以Maven / Eclipse格式找到本文的资源。

更进一步:

翻译自: https://blog.frankel.ch/mixing-vaadin-and-scala/

vaadin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值