[java]局所的にクラスをオーバーライドして、返すファクトリーメソッドを考えてみた。 2009/02/04

Javaです。

局所的にクラスをオーバーライドして、返すファクトリーメソッドを考えてみました。
ここで例にしてみたのはswingコンポーネントです。

特定のクラスの処理だけをオーバーライドして返すファクトリーメソッドです。
ジェネリックーを意識してますけど、どうでしょう。

import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class NewInstance {
public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
JTextField textField = CREATE(JTextField.class);
System.out.println(textField.getText());
}

/**
* <p>
* 局所的にクラスをオーバーライドして、返すファクトリーメソッドを考えてみた。
* </p>
* @param <T>
* @param clazz
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
static public <T extends JComponent> T CREATE(Class<T> clazz)
throws InstantiationException, IllegalAccessException {

class A extends JTextArea {
public void method() {
System.out.println("*** HOGEGEO");
}
}

class B extends JComboBox {
public void method() {
System.out.println("*** HOGEGEO");
}
}

class C extends JTextField {
public String getText() {
return "**** OK";
}
}

if (JTextArea.class.isAssignableFrom(clazz)) {
return clazz.cast(new A());
}
if (JComboBox.class.isAssignableFrom(clazz)) {
return clazz.cast(new B());
}
if (JTextField.class.isAssignableFrom(clazz)) {
return clazz.cast(new C());
}
return clazz.newInstance();
}

}

: