Object.toString()显示错了class?
Object.toString() show the wrong class?
我在调试一些代码时遇到了一个奇怪的问题。
这是我用来测试的相关内容(我们不关心我测试的是什么):
private void launch(){
System.out.println("DIAGNOSIS ");
System.out.println("commands size: "+commands.size());
System.out.println("commands top element: "+commands.peek());
SimpleCommand command = commands.peek();
System.out.println("simple command peek :"+command);
if(!isEmpty()) {
commands.peek().apply();
countDown.reset(delays.peek());
countDown.run();
}
}
在这里,调试 window 向我显示的内容:
当我在 SimpleCommand.class 的实例上调用 toString() 时你可以看到
它表明给定的对象实际上是一个 BattleInteractionMachine.class (BIM)。这应该很明显,但我想说明我没有覆盖 Object.class
中的 toString 方法
然而,那两个 类 彼此没有关系
SimpleCommand 继承树:SimpleCommand < Command < Object
BIM 继承树:BIM < MachineState < Object
我完全不知道这怎么可能...
关于它如何发生的任何想法?我不寻求针对我的案例的具体答案,而是寻求对这个问题如何上升的一般理解。
从 commands.peek()
返回的对象 不是 一个 BattleInteractionMachine
对象。
您错过了显示名称的 </code></strong> 部分,它是返回对象的 class 名称的一部分。 <code>@
符号之前的任何内容都是完全限定的 class 名称。
$
和数字后缀表示该对象是 匿名 class 的实例,定义在 BattleInteractionMachine
class.
数字 3 表示 BIM 至少声明了另外两个匿名 classes,因为编号通常以 1 开头。如果您可以在文件系统或 .jar
文件,您还会看到其他 BattleInteractionMachine$XXX.class
文件,其中 XXX 可以是数字或名称或更复杂的内容。
例如像这样:
class BattleInteractionMachine {
// ...
void somemethod() {
// ...
SimpleCommand command = new SimpleCommand() {
// methods here
}
// ...
}
// ...
}
我在调试一些代码时遇到了一个奇怪的问题。
这是我用来测试的相关内容(我们不关心我测试的是什么):
private void launch(){
System.out.println("DIAGNOSIS ");
System.out.println("commands size: "+commands.size());
System.out.println("commands top element: "+commands.peek());
SimpleCommand command = commands.peek();
System.out.println("simple command peek :"+command);
if(!isEmpty()) {
commands.peek().apply();
countDown.reset(delays.peek());
countDown.run();
}
}
在这里,调试 window 向我显示的内容:
当我在 SimpleCommand.class 的实例上调用 toString() 时你可以看到 它表明给定的对象实际上是一个 BattleInteractionMachine.class (BIM)。这应该很明显,但我想说明我没有覆盖 Object.class
中的 toString 方法然而,那两个 类 彼此没有关系
SimpleCommand 继承树:SimpleCommand < Command < Object
BIM 继承树:BIM < MachineState < Object
我完全不知道这怎么可能... 关于它如何发生的任何想法?我不寻求针对我的案例的具体答案,而是寻求对这个问题如何上升的一般理解。
从 commands.peek()
返回的对象 不是 一个 BattleInteractionMachine
对象。
您错过了显示名称的 </code></strong> 部分,它是返回对象的 class 名称的一部分。 <code>@
符号之前的任何内容都是完全限定的 class 名称。
$
和数字后缀表示该对象是 匿名 class 的实例,定义在 BattleInteractionMachine
class.
数字 3 表示 BIM 至少声明了另外两个匿名 classes,因为编号通常以 1 开头。如果您可以在文件系统或 .jar
文件,您还会看到其他 BattleInteractionMachine$XXX.class
文件,其中 XXX 可以是数字或名称或更复杂的内容。
例如像这样:
class BattleInteractionMachine {
// ...
void somemethod() {
// ...
SimpleCommand command = new SimpleCommand() {
// methods here
}
// ...
}
// ...
}