例外クラスのコンストラクタの引数
java.lang.Throwable クラスでは、次の4つのコンストラクタが提供されている(Java 2 SE 1.4 以降)
- Throwable()
- Throwable(String message)
- Throwable(String message, Throwable cause)
- Throwable(Throwable cause)
で、Java 2 SE 1.3 以前では Throwable を引数に持つコンストラクタが提供されていなかった。そのせいなのかどうかは分からないが、Java 2 SE 1.4 において、Throwable をパラメータとして渡したいのに対応するコンストラクタがなくて唸っていたことがあったので、Java 2 SE 5.0 ではどれくらいの例外クラスに対して、Throwable をパラメータとして渡せるコンストラクタが追加されたのかを調べてみた。
次のようなスクリプトで、rt.jar に含まれるクラスについて調べた。
#! /bin/bash pushd `dirname $0` WJAVA_14_HOME=D:/lang/java/j2sdk1.4.2_18 WJAVA_15_HOME=D:/lang/java/jdk1.5.0_11 JAVA_14_HOME=/D/lang/java/j2sdk1.4.2_18 JAVA_15_HOME=/D/lang/java/jdk1.5.0_11 jar tf ${WJAVA_14_HOME}/jre/lib/rt.jar |\ grep '^java[x]*/.*Exception.class' |\ sort |\ sed -e 's/[.]class$//' -e 's|/|.|g' > clslist.txt for c in `cat clslist.txt` ; do echo "=== ${c} ===" ${JAVA_14_HOME}/bin/javap.exe ${c} | grep "public ${c}" | sort > $$_14.txt ${JAVA_15_HOME}/bin/javap.exe ${c} | grep "public ${c}" | sort > $$_15.txt diff -w $$_14.txt $$_15.txt rm -f $$_14.txt $$_15.txt done > result.txt ${JAVA_14_HOME}/bin/java.exe -version ${JAVA_15_HOME}/bin/java.exe -version
Windows 上の cygwin 環境で動かしているので、変な感じのスクリプトになっている。
結果。
- java.lang.IllegalArgumentException
- java.lang.IllegalStateException
- java.lang.SecurityException
- java.lang.UnsupportedOperationException
- java.security.DigestException
- java.security.GeneralSecurityException
- java.security.InvalidAlgorithmParameterException
- java.security.InvalidKeyException
- java.security.KeyException
- java.security.KeyManagementException
- java.security.KeyStoreException
- java.security.NoSuchAlgorithmException
- java.security.ProviderException
- java.security.SignatureException
- java.security.cert.CRLException
- java.security.cert.CertificateEncodingException
- java.security.cert.CertificateException
- java.security.cert.CertificateParsingException
- java.security.spec.InvalidKeySpecException
java.security パッケージを除くと、意外と少なかった。
逆に、Throwable クラスへのコンストラクタの追加が Java 2 SE 1.4 で行われているので、Java 2 SE 1.3 と 1.4 の違いを見てみるともっとたくさんあるのかもしれない。
Java 2 SE 1.3 の環境をセットアップすることがあったらちょっと確かめてみるかな‥ (いつになるやら)