8. 从Lotusscript到Java

来源:互联网 发布:java是什么意思程序 编辑:程序博客网 时间:2024/05/21 08:51
随着Notes开发逐渐转向使用XPages,主要的编程语言也从Lotusscript变成了服务器端Javascript和Java。无论是开发新的功能还是迁移旧的系统,都需要用这些新语言编写大量代码。使用Java开发有其独特的优势,以后会专门介绍。这里先谈谈从Lotusscript转换到Java需要注意的地方。

首先是语法的差异。这是最明显也最容易注意到的。比如下面这些基本的差别

 

Lotusscript

Java

大小写

不敏感

敏感

句末

分号

变量声明

Dim variable as type

Type variable;

错误处理

On error goto

try{}catch{}

对象和值变量

区分,给对象变量赋值时需Set

不区分

此外还有函数的声明、调用,Lotusscript中各种流程控制的结构都有不同的开始和结束语句而Java中使用()和{}完成等等。

这些只要了解对应的语法,都很容易将Lotusscript的代码移植到Java。容易出错的是这样一些规则上的细微差别。

 

Lotusscript

Java

判断两表达式是否相等

比较两个值时用=,比较对象时用Is。

==

Select/Switch结构

每个条件执行的语句后不需要break。

需要break。

判断字符串是否相等

=

需使用字符串的equals方法。

字符串在Java中是对象。==比较的是两个对象变量的全等性,即两者是否指向同一对象。

两个来源不同的字符串,即使内容相同,也是不同的对象。

String s1=”abc”;

String s2=”abc”;

s1==s2; //false

s1.equals(s2); /true

定义常量

使用Const关键字

虽然Java保留了const关键字,但是使用final关键字标识一个字段不能改变(相当于定义常量)。

 其次是编程范式上的不同。Lotusscript是一种兼有面向过程和面向对象范式的语言,而且在传统的开发中大量使用的还是面向过程的风格,程序被组织成一个个函数。Java则是完全的面向对象的语言。即使只执行一行语句,也需要创建一个类。这种思想上的转换如果在Lotusscript开发中已经大量创建自定义对象也不难完成。

再次是Java与Lotusscript特性的差别,包括Domino对象的API。

  1. Lotusscript中大量使用variant。这是一种标记了自身类型的多用途的数据结构。它使得一个函数可以处理多种不同的参数类型,比如Format。而且可以包含数组,使得数组的赋值和传递、返回成为可能。使用它,还可以形成一种“后期绑定”的效果,将不同类型又具有同样方法的对象用一个变量表示。Java中具有类似效果的就是Object。但是我们很少直接使用它,因为Java是一种强类型的静态语言,需要明确指定变量的类型。而且variant在Lotusscript的功能都被Java的特性一一实现。函数的多种不同的参数类型通过方法的重载解决。数组本身可以被传递给函数和被返回。“后期绑定”的效果可以通过类继承和接口实现。
  2. 为了使得一个函数能处理不同参数的情况,Lotusscript采用的方式是Variant和可选参数,Java则是通过方法重载。
  3. Domino对象的Lotusscript API经常返回可变长度的数组,比如NotesDocument.GetItemValue()。在JavaAPI中,这些数组都被Vector代替,要取其中某个值时需要调用Vector.get()方法,或者在最常见的取仅有的第一个值时使用getItemValueAsString/Integer/Double()。
  4. Lotusscript中含有一些用于与用户交互的语句,比如MessageBox,也可以访问Notes前端对象。Java只能访问Notes后端对象,并且与用户的交互需要通过页面和具体的控件、Javascript实现。
  5. Lotusscript中Variant未赋值时可用IsEmpty检测是否为空,对象变量未赋值时为Nothing,NotesAPI在未能获得有效对象时也返回Nothing。在Java中,这些都被null代替。

最后是Java开发在Domino领域特别需要注意的,这些方面即使是Java的老手也会觉得陌生。这主要包括两点:

  1. 对象的回收
  2. 安全性暨Session的创建

这两点都需要较长的说明,之后会专门介绍。