为什么Class.isLocalClass总是Boolean.FALSE? [英] Why does Class.isLocalClass always 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屋!