gpt4 book ai didi

java - 反射中获取方法参数的类型

转载 作者:行者123 更新时间:2023-12-02 10:51:17 25 4
gpt4 key购买 nike

我用反射(reflection)来工作。并且我需要获取我的set()实体的参数方法来根据类型调用相应的填充方法。

try{
Class clazz = aClass.getClass();
Object object = clazz.newInstance();
while (clazz != Object.class){
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods){
if (method.isAnnotationPresent(ProductAnnotation.class)) {
Object[] strategyObj = new Object[1];
if (method.getReturnType().getName().equals("int")) { //reflexion never comes in if
strategyObj[0] = strategy.setInt(bundle.getString(method.getName().substring(3).toLowerCase()));
method.invoke(object, strategyObj);
}if (method.getParameterTypes().getClass().getTypeName().equals("String")){ //reflexion never comes in if
strategyObj[0] = strategy.setString(bundle.getString(method.getName().substring(3).toLowerCase()));
method.invoke(object, strategyObj);
}
}
}
clazz = clazz.getSuperclass();
}
return (FlyingMachine) object;
} catch (IllegalAccessException | IOException | InvocationTargetException | InstantiationException e) {
e.printStackTrace();
}
return null;
}

我尝试使用getReturnedType()getParametrTypes(),但是反射没有输入任何条件。我到底做错了什么?

我的注释

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface ProductAnnotation {
String value();
}

应该引起反射的方法。根据方法的类型,调用这些方法之一以进一步处理和填充数据。

@Override
public int setInt(String title) throws IOException {
String line = null;
checkValue = true;
while (checkValue) {
System.out.println(title + "-->");
line = reader.readLine();
if (line.matches("\\d*")) {
System.out.println(title + " = " + Integer.parseInt(line));
checkValue = false;
} else {
System.out.println("Wrong value, try again");
checkValue = true;
}
}
return Integer.parseInt(line);
}

setString() works exactly the same scheme.

最佳答案

Method::getParameterTypes 返回 Class[]

因此,您的代码 method.getParameterTypes().getClass() 将始终返回 [Ljava.lang.Class。试试这个代码:

Class[] types = method.getParameterTypes();
if (types.length == 1 && types[0] == String.class) {
// your second condition...
}

关于java - 反射中获取方法参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com