instanceof演算子は型比較演算子と言います。
言語規定では、15.20.2 型比較演算子 instanceof
で定義されています。
A instanceof B の場合、1.『オブジェクトAは型Bのインスタンスである』だけでなく、
2.『キャストして代入可能』である場合もtrueとなります。
私は1だけかとしばらく思っていたのですが、
参考書を読むと2も書かれていたので言語規定を読んでみると、
もう少し本質的な説明がなされていました。
曰く、
『Aが null でなく、例外 ClassCastException を投げず
に B にキャストできるならば、trueとする。』
だそうです。
はい、ということで、ClassCastExceptionも詳しく調べないといけませんね。
ClassCastException は、API仕様で調べましょう。
曰く、
『あるオブジェクトを継承関係にないクラスに
キャストしようとしたことを示すためにスローされます。』
Comparator と Comparableの違い。
分かれば簡単ですが、紛らわしい人には紛らわしい。
ComparatorとComparableはインターフェースです。
Comparatorは任意のクラスのソート順(並び順)を指定します。
Comparableは自分のクラスのソート順を指定します。
class Sample implements Comparator{} は、
処理の中で何かのクラス(ソートさせたいクラス)のソート順を定義します。
compare()をオーバーライドして定義します。
class Sample implements Comparable{} は、
処理の中で自分のクラス(Sample)のソート順を定義します。
comparaTo()をオーバーライドして定義するんです。
分かれば簡単ですが、紛らわしい人には紛らわしい。
ComparatorとComparableはインターフェースです。
Comparatorは任意のクラスのソート順(並び順)を指定します。
Comparableは自分のクラスのソート順を指定します。
class Sample implements Comparator{} は、
処理の中で何かのクラス(ソートさせたいクラス)のソート順を定義します。
compare()をオーバーライドして定義します。
class Sample implements Comparable{} は、
処理の中で自分のクラス(Sample)のソート順を定義します。
comparaTo()をオーバーライドして定義するんです。
シグニチャの研究。
もとい、シグネチャの研究。
メソッドのシグネチャという概念を知っていますか?
そもそもシグネチャは何かを知っていますか?
シグネチャとは、英単語【signature】の日本語訳です。
意味は サイン、署名 などという意味になります。
つまり、ものを識別する記号という事です。
転じて、メソッドのシグネチャとは、
メソッドを識別するものという事になります。
ちなみに、シグネチャはシグニチャではありません。
シグネチャが標準です。言語規定[8.4.2 メソッドのシグネチャ] でそう使われているからです。
メソッドのシグネチャは3つの要素からなります。
3つの要素とは、メソッド名、引数の型、引数の数の3つになります。
Javaでは一般的にメソッドを定義するとき、以下のように書きます。
public void メソッド名 (引数の型 変数){ 処理 };;
例えば、
public void test(String s){ 処理; };
という具合ですね。
このとき、メソッド名は test
引数の型は String
引数の数は Stringが1つ
ということになります。
引数の型や数はいくつでもOKです。
public void test(String s,int i,int t){};
という要領ですね。
私が気になったのは、
引数の並び順は関係あるのか?ということ。
簡単なサンプルを書いて調べてみました。
public class Main {
public void test(String s,int i){};
public void test(int i,String s){};
}
メソッドtestの2つの引数String sとint iの順番を逆にしたメソッドを作りました。
コンパイルしたらエラーにならなかったので、順番が変わればOKみたいです。
コンパイラは、メソッドの順番も区別する。
と考えてよいということですね。
勉強になりました^^
もとい、シグネチャの研究。
メソッドのシグネチャという概念を知っていますか?
そもそもシグネチャは何かを知っていますか?
シグネチャとは、英単語【signature】の日本語訳です。
意味は サイン、署名 などという意味になります。
つまり、ものを識別する記号という事です。
転じて、メソッドのシグネチャとは、
メソッドを識別するものという事になります。
ちなみに、シグネチャはシグニチャではありません。
シグネチャが標準です。言語規定[8.4.2 メソッドのシグネチャ] でそう使われているからです。
メソッドのシグネチャは3つの要素からなります。
3つの要素とは、メソッド名、引数の型、引数の数の3つになります。
Javaでは一般的にメソッドを定義するとき、以下のように書きます。
public void メソッド名 (引数の型 変数){ 処理 };;
例えば、
public void test(String s){ 処理; };
という具合ですね。
このとき、メソッド名は test
引数の型は String
引数の数は Stringが1つ
ということになります。
引数の型や数はいくつでもOKです。
public void test(String s,int i,int t){};
という要領ですね。
私が気になったのは、
引数の並び順は関係あるのか?ということ。
簡単なサンプルを書いて調べてみました。
public class Main {
public void test(String s,int i){};
public void test(int i,String s){};
}
メソッドtestの2つの引数String sとint iの順番を逆にしたメソッドを作りました。
コンパイルしたらエラーにならなかったので、順番が変わればOKみたいです。
コンパイラは、メソッドの順番も区別する。
と考えてよいということですね。
勉強になりました^^