The rather baroquely-named Class.isAssignableFrom
is what you're after. I usually end up having to read the javadoc to make sure I get it the right way around:
Determines if the class or interface
represented by this Class object is
either the same as, or is a superclass
or superinterface of, the class or
interface represented by the specified
Class parameter. It returns true if
so; otherwise it returns false. If
this Class object represents a
primitive type, this method returns
true if the specified Class parameter
is exactly this Class object;
otherwise it returns false.
Specifically, this method tests
whether the type represented by the
specified Class parameter can be
converted to the type represented by
this Class object via an identity
conversion or via a widening reference
conversion.
For example:
public class X {
public int i;
public static void main(String[] args) throws Exception {
Class<?> myType = Integer.TYPE;
Object o = new X();
for (Field field : o.getClass().getFields()) {
if (field.getType().isAssignableFrom(myType)) {
System.out.println("Field " + field + " is assignable from type " + o.getClass());
}
}
}
}