Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取类的代码名<;阵列>;_Java_Reflection_Code Generation - Fatal编程技术网

Java 获取类的代码名<;阵列>;

Java 获取类的代码名<;阵列>;,java,reflection,code-generation,Java,Reflection,Code Generation,我正在使用反射进行一些代码生成,需要获取描述代码中某些数组类型的字符串。默认的API并没有真正让这变得容易 (新的int[12]).getClass().getName()返回[I (新日期[2][]).getClass().getName()返回[[Ljava.util.Date 结果是可以解析的,但是有没有更简单、更好的方法分别从这两个方面获取int[]和java.util.Date[][]?没有内置的方法返回“nice name”(也称为java源代码中编写的名称) 返回“nice”名

我正在使用反射进行一些代码生成,需要获取描述代码中某些数组类型的字符串。默认的API并没有真正让这变得容易

  • (新的int[12]).getClass().getName()
    返回
    [I
  • (新日期[2][]).getClass().getName()
    返回
    [[Ljava.util.Date
结果是可以解析的,但是有没有更简单、更好的方法分别从这两个方面获取
int[]
java.util.Date[][]

没有内置的方法返回“nice name”(也称为java源代码中编写的名称)

返回“nice”名称:它只返回类名而不返回包,并根据需要附加
[]

如果需要具有
[]
的完全限定名,则需要手动构造:

 public static String getName(final Class<?> clazz) {
   if (!clazz.isArray()) {
     return clazz.getName();
   } else {
     return getName(clazz.getComponentType()) + "[]";
   }
 }
公共静态字符串getName(最终类clazz){
如果(!clazz.isArray()){
返回clazz.getName();
}否则{
返回getName(clazz.getComponentType())+“[]”;
}
}
试试看

数组的简单名称是附加了“[]”的组件类型的简单名称


(新整数[12]).getClass().getName()
返回“[Ljava.lang.Integer;”!
(新整数[12]).getClass().getName()
返回“[I”。我想你的意思是“获取
int[]
”而不是“获取
Integer[]
”。要使格式更好,你需要在你想要呈现的时候放置一些规则,比如去掉“java.lang”甚至“java.util.”用于列表和集合。不要忘记
java.sql.Date
java.util.Date
;不一样。@Matt:是的,和Joachim提到的错误一样。@Peter:因为代码是生成的,所以我不关心其中的FQN。OP可能想要
返回clazz.getSimpleName()
而不是
return clazz.getName()
@Matt:Oops…我没有意识到
getSimpleName()
也处理数组!所以我的答案实际上是错误的!因为生成了代码,所以完全限定的名称是可以的。但是有没有办法获得数组深度(例如
日期[]
)从
对象?@Bart:只需调用
getComponentType()
,直到
isArray()
返回
false
并计算需要调用多少次:这是您的数组维度。哦,非常好-我以前从未注意到这一点。