七、方法的调用
调用一个对象的方法有两种方法,一是通过该对象的引用(虚方法),一是直接使用类名(静态方法)。当然该方法必须已被输出。现在给Cocoa类增加一些方法,代码如下:
package Cocoa; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(setImports, declareMain, closeMain); # # This routine creates the references for imports in Java functions # sub setImports{ my $class = shift @_; my @names = @_; foreach (@names) { print "import " . $_ . ";n"; } } # # This routine declares the main function in a Java script # sub declareMain{ my $class = shift @_; my ( $name, $extends, $implements) = @_; print "n public class $name"; if ($extends) { print " extends " . $extends; } if ($implements) { print " implements " . $implements; } print " { n"; } # # This routine declares the main function in a Java script # sub closeMain{ print "} n"; } # # This subroutine creates the header for the file. # sub new { my $this = {}; print "n /* n ** Created by Cocoa.pm n ** Use at own risk n */ n"; bless $this; return $this; }
现在,我们写一个简单的Perl脚本来使用该类的方法,下面是创建一个Java applet源代码骨架的脚本代码:
#!/usr/bin/perl use Cocoa; $cup = new Cocoa; $cup->setImports( "java.io.InputStream", "java.net.*"); $cup->declareMain( "Msg" , "java.applet.Applet", "Runnable"); $cup->closeMain();
这段脚本创建了一个叫做Msg的Java applet,它扩展(extend)了java.applet.Applet小应用程序并使之可运行(runnable),其中最后三行也可以写成如下:
Cocoa::setImports($cup, "java.io.InputStream", "java.net.*"); Cocoa::declareMain($cup, "Msg" , "java.applet.Applet", "Runnable"); Cocoa::closeMain($cup);
其运行结果如下:
/* ** Created by Cocoa.pm ** Use at own risk */ import java.io.InputStream; import java.net.*; public class Msg extends java.applet.Applet implements Runnable { }
注意:如果用->操作符调用方法(也叫间接调用),参数必须用括号括起来,如:$cup->setImports( "java.io.InputStream", "java.net.*");而双冒号调用如:Cocoa::setImports($cup, "java.io.InputStream", "java.net.*");也可去掉括号写成:Cocoa::setImports $cup, "java.io.InputStream", "java.net.*" ;