下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

このQ&Aに関連する最新のQ&A

A 回答 (2件)

無名クラスと呼ばれるものよ。


私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。
    • good
    • 0
この回答へのお礼

そうなのですね。
お二方、ありがとうございます。

お礼日時:2009/05/11 17:53

これは一般に「無名クラス」とか「匿名クラス」と呼ばれるもの。

インスタンス生成時に、その後にある{}内のコードを自身に組み込んだ形でオブジェクトが生成される。例えば、

A a = new A(){void a(){……} };

こんな具合になっていたら、生成されたaインスタンスには、この{}にあるメソッドaが組み込み済みとなっている。

本来のクラスAのインスタンスとは異なるインスタンスが生成されるわけで、ということはこのaインスタンスは、クラスAのインスタンスではなくなってしまう(正確には、クラスAを継承した、何らかのクラスのインスタンスということになる)。が、そうしたクラスは定義されておらず、この場で名前のないクラスのインスタンスが作られた、としかいいようがない。で、無名クラスとか匿名クラスといわれるわけ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q()ってどういう意味ですか?

()ってどういう意味ですか?

友人がTwitterなどで文章の途中に()のようにカッコの間に何もいれず続けて打っていたのですがいったいどういう意味で使っていたのでしょうか?

Aベストアンサー

カッコ ( 格好 ) つけただけ


で意味なし

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Q()の意味は?

オケの楽譜(パート譜)に(SOLO)とあるとき、()に何か意味はありますか?
パートで1人だけ演奏してください、という意味でいいんですかね?

Aベストアンサー

そのとおりです。
よく曲の途中で他のパートがシーンとなってソロの人が1人だけ立って演奏したりします。
すごく目立ちますがソロパートは気分いいです。

Qimportするには java.io.*; import org.apache.log4j.*;

EclipseでJavaの開発をしています。
import java.io.*;
import org.apache.log4j.*;
がエラーになります。
多分ライブラリーに入れる必要があるのだと思いますが、その方法について
教えて下さい。宜しくお願い致します。

Aベストアンサー

プロジェクトフォルダを右クリック→「ビルド・パス」→「ビルド・パスの構成」
あるいはプロジェクトフォルダを右クリック→「プロパティ」→「Javaのビルド・パス」

で、ライブラリがプロジェクトフォルダ配下に存在しているなら「Jarの追加」
プロジェクトフォルダ以外の場所にあるなら「外部Jarの追加」で追加できます。

ちなみにjava.ioはJ2SEに含まれているので(「JREシステムライブラリ」があるはずなので)
追加しなくても良いです。

Qこの赤いペンで囲まれた( )は省略してもしなくてもいいよって意味ですか?

この赤いペンで囲まれた( )は省略してもしなくてもいいよって意味ですか?

Aベストアンサー

見た感じ、1行上のShe の後ろに挿入せよ、ではないですか?

Q用語/newを伴わないコンストラクタの呼出=関数?

コンストラクタを勉強しているのですが、「用語」「意味」が分からないので、教えてください

■質問1
・いついかなる時でも、「コンストラクタ関数」=「コンストラクタ」=「関数」=「メソッド」なのでしょうか?
・例えば、「newをつけずに、コンストラクタを関数として呼ぶ」場合も、「コンストラクタを実行する」と言うのでしょうか?

■質問2 … 「new」付与による相違
・「new」付与しないと、「コンストラクタ」内で「this」が指し示す対象が異なる(グローバルオブジェクトになってしまう)のだと思うのですが、それ以外に何か相違点はあるのでしょうか?
・「new」付与しないとオブジェクトが正しく生成されないので、不具合が生じる可能性がある?

■質問3
・「new」を付けずに、オブジェクトを関数として実行するのは、例えばどういう使い方をするときなのでしょうか?

Aベストアンサー

このへんは、一般のオブジェクト指向の概念を無理やりJavaScriptに当てはめようとしたがために混乱を起こしている面があると思います。

コンストラクタ関数と一般に呼びますが、別にそんな特別な関数があるわけじゃありません。ただの関数です。そして、故にオブジェクトです。JavaScriptでは関数もオブジェクトだということは学ばれたと思います。単にオブジェクトを作る用に用意した関数を「コンストラクタ関数」と便宜的に呼んでいるだけです。

関数オブジェクトは、そのまま呼び出せば、そこに書かれた処理が実行されます。ではnewは何か?というと、これはその後にある関数オブジェクトから新しいオブジェクトを生成するためのものです。

newとthisの関係なんて、別にありません。thisは、「現在実行中の処理があるオブジェクトを示す」というだけのものです。メソッドを呼び出すと、そのメソッドはそのオブジェクトの中にあるものですから、オブジェクトがthisとなります。では関数は?

実は、関数というのは、Globalオブジェクト(Callオブジェクトといってるところもあります)のメソッドなのです。関数を定義するというのは、Globalオブジェクトのメソッドを作っているのです。またグローバル変数は、Globalオブジェクトのプロパティです。

なので、関数を呼び出すというのは、「Globalオブジェクトのメソッドを呼び出している」ということなので、Globalがthisになります。ただしGlobalオブジェクトは利用する側からアクセスできないのでそう見えないというだけです。

なので、関数の呼び出しだのnewだのメソッドとの違いだのといったややこしいことは、見かけの問題で、実際に行なっているのは「メソッドを実行する」「newでオブジェクトを作る」これだけです。

このへんは、一般のオブジェクト指向の概念を無理やりJavaScriptに当てはめようとしたがために混乱を起こしている面があると思います。

コンストラクタ関数と一般に呼びますが、別にそんな特別な関数があるわけじゃありません。ただの関数です。そして、故にオブジェクトです。JavaScriptでは関数もオブジェクトだということは学ばれたと思います。単にオブジェクトを作る用に用意した関数を「コンストラクタ関数」と便宜的に呼んでいるだけです。

関数オブジェクトは、そのまま呼び出せば、そこに書かれた処理...続きを読む

Q||とD()の記号の意味が分かりません

確率の勉強をしていたらD(P||P^*)という式が出てきました.
このときのD()と||はどういう意味があるのでしょうか?

Aベストアンサー

同じ記号でも、文脈によって違う意味に使い廻しされるものです。
記号が何を表しているのかは、出典にあたる他はありません。
その記号に出逢った文献の、少し前のほうを読み返してみてください。

確率の勉強中とのことですが、量子論に使う記号のようにも見えます。
出典そのものよりも、それに付いてある文献表に従って
参考文献を読むほうがよいのかもしれません。

Q「> avg = (double)sum/10;

「> avg = (double)sum/10;
この時点では、sumには「今まで入力した人数分の合計」が入っています。
10人になるのは最後の1回だけです。それ以外は10で割っても平均にはなりません。
また、それまでの人数(=i+1)で割っても、「それまでの人数分の平均」であって「10人分の平均」ではありません。」と書いてありますが、for文では10人分の平均点ではないのですか?そうでないのなら、ループ分の}から10人分の平均値を出したらいいのですか?


あとそれと
> if(avg<=count)
> count++;

「avgは「平均値」、countは「平均値以上の人の人数」ですよね?
この2つを比較する意味ってありますか?
また、上に書いたように、このループでは「全員の平均点」は計算できないのですから、「平均点以上かどうか」なんて判定できませんよね。」とはどういう意味ですか?

Aベストアンサー

http://oshiete.goo.ne.jp/qa/6303484.html
の続きですよね?そういうのは前の回答の補足とかでやってください。
新しい質問にしないように。


> for文では10人分の平均点ではないのですか?そうでないのなら、ループ分の}から10人分の平均値を出したらいいのですか?

現在のプログラムでは次のようになります。
・i=0のとき→1番の点数は(例えば)47点→sum=0+47で47→avgはsum/10で4.7→点数が平均以上か判定(してるつもり?)
・i=1のとき→2番の点数は(例えば)53点→sum=0+53で100→avgはsum/10で10→点数が平均以上か判定(してるつもり?)
では、この時点で「平均点は10だから2番は平均点以上だ」と言えますか?
そもそも10点というのは平均点として正しいでしょうか?

また、avgを現在までの平均と修正したとしも
・i=0のとき→1番の点数は(例えば)47点→sum=0+47で47→avgはsum/1で47→点数が平均以上か判定(してるつもり?)
・i=1のとき→2番の点数は(例えば)53点→sum=47+53で100→avgはsum/2で50→点数が平均以上か判定(してるつもり?)
では、この時点で「平均点は50だから2番は平均点以上だ」と言えますか?
このあとの8人全員が90点以上だったら、平均点は50よりずっと大きくなりますよね?


前回も書いたように、手計算でやるときのことをよく考えてみてください。こうなりませんか?
・(手計算では特に書かないけど)総得点の初期値は0
・1番目の点数を総得点に加える
・2番目の点数を総得点に加える
...以下人数分繰り返す。
・全員の総得点を人数で割ると平均点になる

上の手計算で、どこからどこまでが繰り返しになってるか、よく考えてみてください。
それは、そのままプログラムでのforループでの処理になります。


もしかして、for文の動作を理解できてない、ってことは無いですか?


> (略)とはどういう意味ですか?

このif文を日本語にしてみましょう

『もし 「平均点」が「(前の番号までの)平均点以上の人の人数」 以下だったら、「平均点以上の人の人数」を増やす。』

具体的な数字を入れてみましょう

『もし 「3点」が「5人」 以下だったら、「6人」に変更する。』
(会話では 「3点取った人が」を「3点が」という省略している場合もありますが、上の文ではそういう省略は一切無しです)

これらの文に何の違和感も感じないようだと、日本語やりなおしてください、となってしまうのですが。

これも手計算するなら、こうなりますよね
・(手計算では特に書かないけど)人数の初期値は0
・1番目の点数と平均点を比べて、平均点以上だったら 人数+1
・2番目の点数と平均点を比べて、平均点以上だったら 人数+1
...以下人数分繰り返す。
・全員調べたら、最終的な人数が「平均点以上の人数」

比較したいのは何と何か、それが入っているのはどの変数なのか?
それをよく考えてください。

後半は今回の前半に書いた通り。比較対象の平均点が求まってなければ、比較そのものができないってこと。
「これより大きいかどうか教えてください」と言われても「これ」がなんだかわからなければ答えられないですよね?

http://oshiete.goo.ne.jp/qa/6303484.html
の続きですよね?そういうのは前の回答の補足とかでやってください。
新しい質問にしないように。


> for文では10人分の平均点ではないのですか?そうでないのなら、ループ分の}から10人分の平均値を出したらいいのですか?

現在のプログラムでは次のようになります。
・i=0のとき→1番の点数は(例えば)47点→sum=0+47で47→avgはsum/10で4.7→点数が平均以上か判定(してるつもり?)
・i=1のとき→2番の点数は(例えば)53点→sum=0+53で100→avgはsum/10で10→点数が平均以上か判...続きを読む

QC言語のprintf()関数の「f」の意味

標準入出力関数のprintfの意味が分かりません。
「print」は印刷だと思いますが、「f」は何なのでしょうか?

詳しい方がいましたら、よろしくお願いします。

Aベストアンサー

書式を指定するフォーマットの「f」だったハズ。

printf ‐ 通信用語の基礎知識
http://www.wdic.org/w/TECH/printf

QString str = "a\\b\\c";

String str = "a\\b\\c";

という文字列があった時に、a,b,cで分割したいのですが、どのようにsplitさせれば出来るでしょうか?

Aベストアンサー

str.split("\\\\")
円マークを4つよ。


人気Q&Aランキング

おすすめ情報