himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

Working with Java objects

Java のクラスにアクセスできれば、次の課題はオブジェクトの作成である。これは Java の new のように働く。

js> new java.util.Date()
Wed Dec 05 14:12:54 JST 2007

JavaScript 変数に格納した新しいオブジェクトを call メソッドで呼ぶことができる。

js> f = new java.io.File("test.txt")
test.txt
js> f.exists()
false
js> f.getName()
test.txt

※ ここで test.txt を作成し保存

js> f.exists()
true
js>

クラスオブジェクト自身からも静的なメソッドとフィールドにアクセスできる。

js> java.lang.Math.PI
3.141592653589793
js> java.lang.Math.cos(0)
1.0

Javaとは違い、JavaScriptでは、メソッドもオブジェクトで、評価したり、呼ぶことができる。メソッドオブジェクトを見れば、メソッドの様々な overload されたフォームを見ることができる

js> f.listFiles
java.io.File[] listFiles()
java.io.File[] listFiles(java.io.FilenameFilter)
java.io.File[] listFiles(java.io.FileFilter)

js>

この出力結果では、File クラスの 3つ overload された メソッド listFiles の定義を示す。1)引数がないもの、2)FilenameFilter 引数がある別のもの、3)およびFileFilter 引数を取るもの。すべてのメソッドが File オブジェクトの配列を返す。
 パラメタを見て、Java メソッドのタイプを返すことができるのは私たちがメソッドを調べる際に、パラメタかリターンタイプが不確かであるところで踏査のプログラミングで特に役に立つ。
・踏査のプログラミングのための別の役に立つ property はすべての method と field が object のために定義されるのを見る能力です。
  JavaScript for..in 構文で、これらのすべての値を印刷することができる:

js> for( i in f){ print(i+"\n") }
exists
usableSpace
parentFile
mkdir
totalSpace
setExecutable
toString
canExecute
wait
setReadable
setReadOnly
getCanonicalPath
getClass
canonicalPath
getAbsoluteFile
parent
hashCode
class
isHidden
getPath
hidden
name
notify
setWritable
deleteOnExit
length
createNewFile
file
freeSpace
toURL
directory
list
toURI
mkdirs
getFreeSpace
absoluteFile
canRead
getUsableSpace
isDirectory
equals
getAbsolutePath
canWrite
listFiles
absolute
getParentFile
delete
lastModified
getTotalSpace
getCanonicalFile
getName
path
getParent
setLastModified
canonicalFile
absolutePath
renameTo
notifyAll
compareTo
isAbsolute
isFile
js>

Fileのクラスのメソッドだけが記載されないが、メソッドが基底クラスjava.lang.Object(wait のような)から継承されたのに留意。これで、利用可能なメソッドだけを見ることができるため、オブジェクトに深く入れ子にされた継承の階層構造が、より簡単になる。

s> f.name
test.txt
js> f.directory
false