Java tips 無名クラスにパラメータを渡すサンプルです。
解説
無名クラスには通常外部から自由にパラメータを渡すことが出来ないため、いつも無名クラスのためにメンバ変数を用意していました。
でも
Javaには無名クラスにパラメータを渡す方法があったのでメモして置きます。
ポイント
- パラメータを保存する変数を用意する
- パラメータを受け取るメソッドを作成する
- パラメータを受け取るメソッドは自分自身を戻り値とする
- 無名クラスを作成した瞬間だけ、パラメータ受け渡し用のメソッドを実行出来る
ローカル変数にfinalつけて、無名クラスの中からアクセスできるようにも出来るらしいです…
実行結果
無名クラスにに渡したパラメータでダイアログを表示してみました。
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
class NoNameParam extends JFrame {
NoNameParam() {
init();
addMessageButton("メッセージ", "ほげほげっ");
addMessageButton("メッセージ2", "もげもげ");
}
public void init() {
getContentPane().setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("無名クラスにパラメータを渡す");
setSize(200, 300);
setVisible(true);
}
private void addMessageButton(String btnName, String msg) {
JButton btn = new JButton(btnName);
ActionListener al = new ActionListener() {
// ポイント1 パラメータを格納する変数
Component parentComponent;
String msg;
// ポイント2 無名クラスにパラメータを渡すメソッド 無名クラス自身のクラスを返却する
ActionListener setParam(Component parentComponent, String msg) {
// パラメータ格納
this.parentComponent = parentComponent;
this.msg = msg;
// ポイント3 自分自身を返却する
return this;
}
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(parentComponent, msg);
}
// ポイント4 無名クラスを作成した瞬間だけ、setParamを呼べる。
}.setParam(this, msg);
btn.addActionListener(al);
getContentPane().add(btn);
}
public static void main(String[] args) {
new NoNameParam();
}
}
最終更新:2012年09月26日 02:31