[java]あるクラスがあるインターフェイスをインプリメントしているか調べる。
2008/11/12
java
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;
}
}
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;
}
}
: