プログラマメモ2 - programmer no memo2

[java]あるクラスがあるインターフェイスをインプリメントしているか調べる。 2008/11/12

Javaです。
あるクラスがあるインターフェイスをインプリメントしているか調べます。
listの中から調べて指定されたインターフェイスのリストを返します。
ジェネリックを意識したけど、これでいいのかな。

この Class オブジェクトが表すクラスまたはインタフェースが、指定された Class パラメータが表すクラスまたはインタフェースと等しいかどうか、あるいはそのスーパークラスあるいはスーパーインタフェースであるかどうかを判定します。どちらかに当てはまる場合は true を、そうでない場合は false を返します。javadoc


isAssignableFromだけで済むみたい。
あと、ジェネリックを使ってのキャストって(T)oとかを、Classにあるcastメソッドを使ってみました。

import java.util.ArrayList;
import java.util.List;

public abstract class ClassUtils {

static class Aaa implements Idummy1, Idummy2 {
}

interface Idummy1 {
}

interface Idummy2 {
}

interface Idummy_e3 extends Idummy2 {
}

public static void main(String[] args) {

List list = new ArrayList();
list.add(new Aaa());
list.add(new Idummy1() {
});
list.add(new Object() {
});
list.add(new Idummy2() {
});
list.add(new Idummy2() {
});
list.add(new Idummy2() {
});
list.add(new Idummy_e3() {
});
List<Idummy2> r = b(list, Idummy2.class);

System.out.println(r.size());
}

static <T> List<T> b(List<?> list, Class<T> clazz) {
List<T> r = new ArrayList<T>();
for (Object o : list) {
if (clazz.isAssignableFrom(o.getClass())) {
r.add(clazz.cast(o));
}
}
return r;
}
}

: