Java 使用反射获取子类参数类型,而不是超类参数类型
假设我有:Java 使用反射获取子类参数类型,而不是超类参数类型,java,reflection,parameters,Java,Reflection,Parameters,假设我有: abstract class A{ public void init(String name){ //do whatever } } 然后我们有: class B extends A{ public void init(String name,String lastName){ super.init(name); //do whatever } } 我想获得B类的参数类型,但当我这样做时: Class clazz= classLoader
abstract class A{
public void init(String name){
//do whatever
}
}
然后我们有:
class B extends A{
public void init(String name,String lastName){
super.init(name);
//do whatever
}
}
我想获得B类的参数类型,但当我这样做时:
Class clazz= classLoader.loadClass("B");
for (Method m : clazz.getDeclaredMethods())
{
if(m.getName().equals("init")){
Class<?>[] parameters = m.getParameterTypes();
for(Class<?> param : parameters){
print(param.getSimpleName())
}
}
}
Class clazz=classLoader.loadClass(“B”);
对于(方法m:clazz.getDeclaredMethods())
{
if(m.getName().equals(“init”)){
类[]参数=m.getParameterTypes();
用于(类参数:参数){
打印(param.getSimpleName())
}
}
}
我得到3个参数,B类参数和A类参数…(??)
我只想得到B类的参数类型
有没有办法不查询超类?来自:
返回一个数组,该数组包含反映此类对象所表示的类或接口的所有声明方法的方法对象,包括public、protected、default(package)access和private方法,但不包括继承的方法
这正是我在执行代码时所经历的。所以我怀疑您的迭代是否也包括继承的方法。请再次检查/调试。B不应该扩展A吗?是的,我忘记了,现在添加了使用“m.getDeclaringClass()”检查您应该只获取B.init的参数。我认为要么是方法过载,要么就是找不到合适的类。