';Java反射中的[L';前缀
使用Java6反射API,';Java反射中的[L';前缀,java,arrays,reflection,Java,Arrays,Reflection,使用Java6反射API,Class.getDeclaredFields返回非常奇怪的值。类字段示例: protected String[] arrF = new String[15]; 在适当的类上使用getDeclaredFields,返回一个字段: 名称=arrF type=[Ljava.lang.String; 问题是:[L前缀是否意味着arrF是一个数组?我是否可以始终依赖于此,即字段是一个数组,如果iff类型的前缀是[L?如果不是,我如何获得有关字段“arraynes”的一些信
Class.getDeclaredFields
返回非常奇怪的值。类字段示例:
protected String[] arrF = new String[15];
在适当的类上使用getDeclaredFields
,返回一个字段
:
- 名称=
arrF
- type=
[Ljava.lang.String;
问题是:[L
前缀是否意味着arrF
是一个数组?我是否可以始终依赖于此,即字段是一个数组,如果iff类型的前缀是[L
?如果不是,我如何获得有关字段“arraynes”的一些信息?[
表示一维数组([
是二维数组),然后是类/接口名称(Lclassname
)是该数组的类型
- 看
我能否始终依赖于此,即字段是一个数组,iff类型前缀为[L”
是的。或者更好,使用。这是一种更好的方法
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import static java.lang.System.out;
public class ArrayFind {
public static void main(String... args) {
try {
Class<?> cls = Class.forName(args[0]);
Field[] flds = cls.getDeclaredFields();
for (Field f : flds) {
Class<?> c = f.getType();
if (c.isArray()) {
// ....
}
}
} catch (ClassNotFoundException x) {
x.printStackTrace();
}
}
}
import java.lang.reflect.Field;
导入java.lang.reflect.Type;
导入静态java.lang.System.out;
公共类数组查找{
公共静态void main(字符串…参数){
试一试{
Class cls=Class.forName(args[0]);
字段[]flds=cls.getDeclaredFields();
用于(字段f:flds){
类c=f.getType();
if(c.isArray()){
// ....
}
}
}捕获(ClassNotFoundException x){
x、 printStackTrace();
}
}
}
顺便说一句,byte[]的名称为[B-[L]表示长字符和/或引用。您得到的是所谓的二进制名称。二进制名称能够表示数组类型,因为Java中的数组没有实现或扩展类似数组的接口
[Ljava.lang.String;
表示:
[
一维数组
L
引用类型而非原语的数组
java.lang.String;
表示数组的组件类型
哦,我明白了。但是,要得到数组的维数,我需要解析字符串以获得[
,对吗?类没有方法为我这样做。@petrbel看到这个问题了: