这是什么: [Ljava.lang.Object;?
当我调用从函数调用收到的对象时,我得到了这个。我知道对象的类型是用这个字符串编码的,但我不知道如何阅读它。toString
这种类型的编码叫什么?
当我调用从函数调用收到的对象时,我得到了这个。我知道对象的类型是用这个字符串编码的,但我不知道如何阅读它。toString
这种类型的编码叫什么?
[Ljava.lang.Object;
是 的名称,java.lang.Class
表示 的数组的类。Object[].class
Object
命名方案记录在 Class.getName()中
:
如果此类对象表示的引用类型不是数组类型,则返回该类的二进制名称,如 Java 语言规范 (§13.1) 所指定。
如果此类对象表示基元类型 或 ,则返回的名称是与基元类型 或 对应的 Java 语言关键字。
void
void
如果此类对象表示数组类,则名称的内部形式由元素类型的名称组成,前面有一个或多个表示数组嵌套深度的字符。元素类型名称的编码如下所示:
'['
Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
你的是该列表中的最后一个。以下是一些示例:
// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx
数组上的方法以这种格式返回的原因是,数组不是继承自 的方法,该方法指定如下:toString()
String
@Override
Object
类
Object
的toString
方法返回一个字符串,该字符串由对象是其实例的类的名称、at 符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
注意:你不能依靠任何任意对象来遵循上述规范,因为它们可以(并且通常做)它来返回其他东西。检查任意对象类型的更可靠的方法是在其上调用 getClass()
(继承自 ) 的方法,然后对返回的对象进行反射。不过,理想情况下,API 的设计应该使得不需要反射(请参阅 Effective Java 2nd Edition, Item 53: Prefer interface 而不是 reflection)。toString()
@Override
final
Object
Class
toString
java.util.Arrays
为基元数组和 .还有一些您可能希望用于嵌套数组。toString
Object[]
deepToString
以下是一些示例:
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
还有 和 通过其元素执行数组相等性比较,以及许多其他与数组相关的实用方法。Arrays.equals
Arrays.deepEquals
如果你在这里是因为Liquibase错误说:
Caused By: Precondition Error
...
Can't detect type of array [Ljava.lang.Short
并且您正在使用
not {
indexExists()
}
前提条件多次,那么你就面临着一个老bug:https://liquibase.jira.com/browse/CORE-1342
我们可以尝试使用 bare (Postgres) 执行上述检查:sqlCheck
SELECT COUNT(i.relname)
FROM
pg_class t,
pg_class i,
pg_index ix
WHERE
t.oid = ix.indrelid
and i.oid = ix.indexrelid
and t.relkind = 'r'
and t.relname = 'tableName'
and i.relname = 'indexName';
其中 - 是索引表名称,- 是索引名称tableName
indexName