上一章节的例子中,所有变量都有定义类型。如“JButton button”的类型。BeanShell 将强制执行这些类型的变量。你会发现如果你试图分配非 JBuoon 的类型给变量“button”(你会得到一个错误的消息),BeanShell会对它进行类型强制转换。然而,BeanShell 同样支持“松散的”或者动态地指定类型类型。也就是说,你可以不需要先定义变量以及指定特定的变量类型来指向变量(比如:" hashtable = new Hashtable(); "hashtable 是一个未定义且没有指定类型的变量)。既然如此,BeanShell 将酌情在运行时做类型检查。所以,我们可以在之前的例子中去掉左边的类型来运行,如下:

 

原来的代码:

 
  

Hashtable hashtable = new Hashtable();
Date date = new Date();
hashtable.put( "today", date );
// 打印当前系统的时间值
print( System.currentTimeMillis() );

 

JButton button = new JButton( "My Button" );
JFrame frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);

松散类型的写法(去掉左边的类型定义,包括“Hashtable hashtable”中的“Hashtable”,“Date date”中的“Date”等):

  

这样看起来似乎并没有为我们节省大量的工作。但是当你渐渐依赖写脚本,把它作为你开发和测试过程中的一部分,你就会发现与以前的开发大有不同。尤其在交互式的使用中。

 

当你使用“松散”的变量时,你可以在之后的使用中自由地将它重新指派给另一个 Java 对象类型。没有指定类型的 BeanShell 变量也可以自由地持有像 int 和 boolean一样的 Java 原始类型。别担心,BeanShell 总是知道变量的真实类型而且只是酌情地让我们使用这些变量。对于原始类型,这包括当你在表达式中使时真正的 Java 语言会做正确的数字类型提升。(说明类型提升规则的例子:byte型和short型的值被提升到int