GWTのRPCを利用するときに、無名クラスの記述がでてきます。Javaに慣れていない人にはわかりにくいところですので、無名クラスについて取り上げます。
例えば、以下のようなインタフェースが定義されていたとします。このインタフェースには2つの抽象メソッドが定義されています。抽象メソッドですので、定義されているのは名前だけで、実際の内容は実装するクラスで書く必要があります。
- interface Callback {
- void onSuccess();
- void onFailure()
- }
interface Callback {
void onSuccess();
void onFailure()
}
つづいて、このインタフェースを実装するクラスを作成します。必ずCallbackインタフェースで定義されているメソッドを定義しなければなりません。
- class TestImpl implements Callback{
- void onSuccess(){
-
- }
- void onFailure(){
-
- }
- }
class TestImpl implements Callback{
void onSuccess(){
//ここに何かかく
}
void onFailure(){
//ここに何かかく
}
}
そして、実際に利用するときには、下記のように書くことになります。
このようにクラスのインスタンスを生成することで、onSuccess等のメソッドを呼び出すことができます。
- Callback test = new TestImpl();
- test.onSuccess();
Callback test = new TestImpl();//あるいは右のような書き方でもよい TestImpl test = new TestImpl();
test.onSuccess();
上記のクラスを宣言する手間を省けるのが無名クラスです。以下のように省略することができます。
- Callback test = new Callback{
- void onSuccess(){
-
- }
- void onFailure(){
-
- }
- }
Callback test = new Callback{
void onSuccess(){
//ここに何かかく
}
void onFailure(){
//ここに何かかく
}
}
何が省略されているかわかりますか?インタフェースクラスは、直接newすることはできませんが、このようにnewしながら中身を定義することで、newされるものは Callbackインタフェースを実装した何か?(つまり無名のクラス)になります。だから、インタフェースで受け取ることができます。
0 件のコメント:
コメントを投稿