首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查类对象是否为Java中另一个类对象的子类

检查类对象是否为Java中另一个类对象的子类
EN

Stack Overflow用户
提问于 2011-01-03 20:47:20
回答 6查看 174.9K关注 0票数 227

我正在尝试使用Java的反射API,并尝试处理一些字段。现在我不得不识别我的字段的类型。字符串很简单,只需执行myField.getType().equals(String.class)即可。这同样适用于其他非派生类。但是如何检查派生类呢?例如,将LinkedList作为List的子类。我找不到任何isSubclassOf(...)extends(...)方法。我需要遍历所有的getSuperClass()并找到我自己的超类吗?

EN

回答 6

Stack Overflow用户

发布于 2011-01-03 20:59:09

另一个选项是instanceof:

代码语言:javascript
复制
Object o =...
if (o instanceof Number) {
  double d = ((Number)o).doubleValue(); //this cast is safe
}
票数 27
EN

Stack Overflow用户

发布于 2015-07-25 00:39:27

这对我来说很有效:

代码语言:javascript
复制
protected boolean isTypeOf(String myClass, Class<?> superClass) {
    boolean isSubclassOf = false;
    try {
        Class<?> clazz = Class.forName(myClass);
        if (!clazz.equals(superClass)) {
            clazz = clazz.getSuperclass();
            isSubclassOf = isTypeOf(clazz.getName(), superClass);
        } else {
            isSubclassOf = true;
        }

    } catch(ClassNotFoundException e) {
        /* Ignore */
    }
    return isSubclassOf;
}
票数 6
EN

Stack Overflow用户

发布于 2018-02-01 03:36:40

这是@schuttek答案的改进版本。它得到了改进,因为它正确地为原语返回false (例如isSubclassOf(int.class,Object.class) => false),并且正确地处理接口(例如isSubclassOf(HashMap.class,Map.class) => true)。

代码语言:javascript
复制
static public boolean isSubclassOf(final Class<?> clazz, final Class<?> possibleSuperClass)
{
    if (clazz == null || possibleSuperClass == null)
    {
        return false;
    }
    else if (clazz.equals(possibleSuperClass))
    {
        return true;
    }
    else
    {
        final boolean isSubclass = isSubclassOf(clazz.getSuperclass(), possibleSuperClass);

        if (!isSubclass && clazz.getInterfaces() != null)
        {
            for (final Class<?> inter : clazz.getInterfaces())
            {
                if (isSubclassOf(inter, possibleSuperClass))
                {
                    return true;
                }
            }
        }

        return isSubclass;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4584541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档