如何获取对象的类型以便我可以将其与instanceof一起使用?

时间:2012-04-06 07:01:04

标签: java reflection

我正在用Java编写程序,我有一个带有public void doSomething(Object o)标题的方法,我想检查o是否是另一个方法的参数的合适类型。所以我拥有的是:

public void doSomething(Object o)
{
    Method m = //get method of another method (using reflection)
    Class<?> cl = m.getParameterTypes()[0];  //Get the class of the 0th parameter
    if(o instanceof cl)         //compile error here
         //do something
}

然而,这不起作用。请有人帮忙吗。感谢

3 个答案:

答案 0 :(得分:5)

请改为尝试:

if(c1.isInstance(o))
{
    // ...
}

答案 1 :(得分:4)

instanceof将静态类型作为参数,您要查找的是动态检查o是否可以作为方法的参数;

Object o = ...
Method m = ...
Class cl = m.getParameterTypes()[0];
if(cl.isAssignableFrom(o.getClass()))  // Is an 'o' assignable to a 'cl'?
{
}

答案 2 :(得分:1)

你可以做到

if (o.getClass().equals(cl))

代替。我认为instanceof需要实际类型(例如String而不是String.class)。