java - 检查 Java 反射类型的类

标签 java reflection

我一直在浏览我在 SO 上看到的答案,到目前为止我找不到任何适合我的解决方案。本质上我只是使用反射来获取一个方法,然后获取它的所有参数类型,如下所示:

Type[] parameters = method.getGenericParameterTypes();

从那里我迭代参数以获取它们各自的类,以便我可以传递正确的数据。我尝试过以下方法:

Type currentType = parameters[index];
Class<?> clazz = Class.forName(currentType.getClass().getName());
if (clazz.isAssignableFrom(Number.class)) {
     //do stuff that is number specific
     //EG drill down farther into specific subclass like int,
     //double, etc for more exact parsing
} else if (clazz.isAssignableFrom(String.class)) {
     //Do stuff that is specific to string
} else {
     //Nope, no love here.
}

但它无法正确检测何时应该是 NumberString 并且总是落入最后一个 else 语句。一定有一些非常简单的东西被我忽略了,但我一生都无法确定它可能是什么。

提前感谢大家。

更新:这是我正在解析的方法 stub 的一个非常简单的示例。这并不复杂。

public void methodWithInt(int integer){
    //do something
}

public void methodWithString(String string){
    //do something else
}

更新:根据 Sotirios Delimanolis 的回答,我已经取得了一些进展。

if (currentType instanceof Class) {
    Class<?> currentClazz = (Class<?>) currentType;
    if (currentClazz.isAssignableFrom(Number.class)) {
        // This isn't getting reached for either int or Integer
    } else if (currentClazz.isAssignableFrom(String.class)) {
        // This IS working correctly for strings
    } else {
        // Both int and Integer fall here
    }
} else {
    // Are primitives supposed to be handled here? If so int isn't
    // being sent here, but is falling in the the else from the
    // condition previous to this one.
}

最佳答案

这个

Type currentType = parameters[index];

已经为您提供了参数的类型。

调用

currentType.getClass()

返回 Type 类型的 Class 对象,而不是您想要的。

ClassType亚型。您可以检查您拥有的 Type 引用是否是 Classinstanceof,然后执行您的 isAssignableFrom

关于java - 检查 Java 反射类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793575/

相关文章:

java - 优化 Android/Java 代码 - 创建同一对象类型的多个实例

java - 如何列出不被继承的方法?

c# - 制作一个人们通过将机器人编译成 dll 来与机器人战斗的游戏,我该如何建立基础?

c# - Reflection.Emit - IL - 对象上的调用方法

.net - 是否可以在没有反射和没有字典的情况下从 F(Type) 转换到 F<T>?

java - 关闭 CipherInputStream 的替代方法

java - 比较两个对象变量时出现问题

java - Eclipse 如何生成 setter 和 getter?

java - Spring Web MVC Cycle中formbackingobject和referencedata对象如何操作?

java - 未修饰的 JFrame 显示不需要的图标