为什么Class.isLocalClass总是Boolean.FALSE? [英] Why does Class.isLocalClass always Boolean.FALSE?

查看:219
本文介绍了为什么Class.isLocalClass总是Boolean.FALSE?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的方法,它总是返回-undefined - 。

I've got a simple Method that returns me always "-undefined-".

public static String getStereoType(Class<?> clazz) {
    String result = "-undefined-";
    if (clazz.isEnum()) {
        result = "enum";
    } else if (clazz.isInterface()) {
        result = "interface";
    } else if (clazz.isLocalClass() || clazz.isMemberClass()) {
        result = "class";
    }
    return result;
}

当我用Object.class或Long.class调用此方法时,总是结果-undefined - 。

When I call this Method with Object.class or Long.class always is the result "-undefined-".

 List<Class<?>> superClazzes = ClassUtil.getSuperClazzList(clazz);
    for (Class<?> c: superClazzess){
        String stereoType = ClassUtil.getStereoType(c.getClass());
        }

public static List<Class<?>> getSuperClazzList(Class<?> clazz) {
        List<Class<?>> resultList = new ArrayList<Class<?>>();
        Class<?> superClass = clazz.getSuperclass();
        if (superClass != null) {
            resultList.add(superClass);
            resultList.addAll(getSuperClazzList(superClass));
        }
        return resultList;
    }


推荐答案

回答你的问题title, isLocalClass() 总是返回 false :它返回<$ c $对于在方法中声明的类型,c> true 。类似地, isMemberClass()对于在另一种类型中声明的类型返回 true

To answer the question in your title, isLocalClass() does not always return false: it returns true for types declared within a method. Similarly, isMemberClass() returns true for types declared within another type.

考虑:

public class Outer {

    interface MemberClass {}

    public static void main(String[] args) {
        class LocalClass {}

        System.out.printf(
            "%s/%s%n",
            LocalClass.class.isLocalClass(),
            LocalClass.class.isMemberClass()
        );

        System.out.printf(
            "%s/%s%n",
            MemberClass.class.isLocalClass(),
            MemberClass.class.isMemberClass()
        );
    }
}

此代码执行时打印出 true / false 后跟 false / true 。它们一起只计算在另一个类中或在方法中定义的类型。严格取决于目标类型是而不是接口枚举,所以你不能用它来过滤。

This code, when executed, prints out true/false followed by false/true. Together, they only account for types which are defined within another class, or within a method. Neither strictly depends on the target type being a class as opposed to an interface or enum, so you cannot use it to filter that way.

请参阅@ Tarion对 应该的方法的出色答案接受(并接受他的答案,因为它更能完全解决你的问题)。

See @Tarion's excellent answer for the approach you should be taking (and accept his answer, as it more completely solves your problem).

这篇关于为什么Class.isLocalClass总是Boolean.FALSE?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆