首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Object.toString()显示了错误的类吗?

Object.toString()显示了错误的类吗?
EN

Stack Overflow用户
提问于 2018-08-26 06:23:01
回答 1查看 95关注 0票数 -2

我在调试一些代码时遇到了一个奇怪的问题。

下面是我用来测试的相关代码(我们并不关心我测试的是什么):

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();
        }
    }

在这里,调试窗口向我展示了:

正如您所看到的,当我在SimpleCommand.class的一个实例上调用toString()时,它显示给定的对象实际上是一个BattleInteractionMachine.class (BIM)。这应该很明显,但是我想指定我还没有覆盖Object.class中的toString方法

然而,这两个类并不相关。

SimpleCommand继承树: SimpleCommand <命令<对象

BIM继承树: BIM < MachineState < Object

我完全不知道这是怎么回事...你知道这是怎么发生的吗?对于我的案例,我并不寻求一个具体的答案,而是寻求一个关于这个问题如何产生的一般理解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 07:41:12

commands.peek()返回的对象不是BattleInteractionMachine对象。

您缺少显示名称的$3部分,它是返回对象的类名的一部分。在@符号之前的任何内容都是完全限定的类名。

$和number后缀表示该对象是在类中定义的匿名类BattleInteractionMachine的实例。

数字3表示BIM至少声明了另外两个匿名类,因为编号通常从1开始。如果您可以在文件系统或.jar文件中看到BattleInteractionMachine.class,您还会看到其他BattleInteractionMachine$XXX.class文件,其中XXX可以是数字、名称或更复杂的内容。

例如,就像这样:

class BattleInteractionMachine {
    // ...
    void somemethod() {
        // ...
        SimpleCommand command = new SimpleCommand() {
            // methods here
        }
        // ...
    }
    // ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52021683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档