我正在用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
}
然而,这不起作用。请有人帮忙吗。感谢
答案 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
)。