gpt4 book ai didi

java - 如果对象类是使用 java 反射的字段上的数组,则无法获取包和类名

转载 作者:行者123 更新时间:2023-11-30 08:53:01 25 4
gpt4 key购买 nike

我有一些问题。

class example{
Text text=new Text();
int a;
JLabel[] label=new JLabel[3];
Panel[][][] panel=new Panel[5][5][5];
}

所以,我试过反射(reflection):

Class cls=Class.forName("example");
Field[]f=cls.getDeclaredFields();
for(field : f){
field.getType().getPackage();
field.getType().getName();
}

包的结果为空,类的结果如 [[[Ljava.awt.Panel

最佳答案

数组是一种特殊类型。它不属于任何包。

尝试(未经测试):

Class cls=Class.forName("example");
Field[]f=cls.getDeclaredFields();
for(Field field : f){
Class<?> type = field.getType()
int numArrayDimensions= 0;
while (type.isArray()){
type = type.getComponentType();
numArrayDimensions++;
}
if (! type.isPrimitive()){
Package pkg = type.getPackage();
}
String className = getFormattedClassName(type, numArrayDimensions);

}

private String getFormattedClassName(Class<?> type, int numArrayDimensions){
StringBuilder sb = new StringBuilder(type.getName());
IntStream.range(0, numArrayDimensions).foreach(dimension -> sb.append("[]"));
return sb.toString();
}

另一方面,原语是一种语言特征。代表它们的类对象不属于任何包。

关于java - 如果对象类是使用 java 反射的字段上的数组,则无法获取包和类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com