如何在Java中强制调用超类实现Object.toString()而不是子类重写对对象的实现

ADTC

请注意:我不是在问如何强制所有类toString()在其源代码中重写请仔细阅读问题。

Java中的所有类都扩展了Object该类。如果任何类具有toString()覆盖,则对的调用Object.toString()将实际执行覆盖方法。

例如:

String test = "StackOverflow";
Object testobj1 = (Object) test;
System.out.println(testobj1.toString()); // prints "StackOverflow"
Object testobj2 = new Object();
System.out.println(testobj2.toString()); // prints "[email protected]<Object.hashcode() in hex>"

我需要的是一个呼叫testobj1toString()实际执行Object类的toString()方法。就像是:

System.out.println( [[testobj1 as Object]] .toString()); // prints "[email protected]<Object.hashcode() in hex>"

我尝试使用:

System.out.println(testobj1.getClass().getName() + '@' + Integer.toHexString(testobj1.hashCode()));

但是,这也具有与上述相同的问题。hashCode()方法也被String覆盖,因此它正在执行StringhashCode(),而不是ObjecthashCode()

是否可以调用重写方法,而不是调用重写方法?

请注意:String的使用仅是示例。不要基于对象始终是String对象的假设来回答问题

还假设:我无权访问类的源代码,因此我不能只是toString()从它们中删除实现或做诸如创建抽象类之类的事情。这有可能对工作的任何对象(包括Java的自己的类或任何类似的API StringHashMapHttpServlet,等)。这也意味着,我寻找答案喜欢这些

失落的心灵

您需要使用System.identityHashCode()来获取实际的(原始)哈希码。

试试下面的代码:

public static void main(String[] args) {
    String test = "StackOverflow";
    Object testobj1 = (Object) test;
    System.out.println(testobj1.toString()); // prints "StackOverflow"
    System.out.println(testobj1.getClass().getName() + '@' + Integer.toHexString(System.identityHashCode(testobj1)));
    System.out.println(test.getClass().getName() + '@' + Integer.toHexString(System.identityHashCode(test)));
    Object testobj2 = new Object();
    System.out.println(testobj2.toString()); 
    System.out.println(testobj2.getClass().getName() + '@' + Integer.toHexString(System.identityHashCode(testobj2)));
}

输出:

StackOverflow
[email protected]
[email protected]
[email protected]
[email protected]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从修饰的子类方法中调用重写的超类方法

UML:如何在Java中实现Association类

Java:强制实现重写toString的设计接口

Java:强制子类重写超类的方法

强制子类中的toString()实现

如何强制子类调用抽象的实现方法

如何在ColdFusion中实现jCrypt Java类?

生成equals / hashCode实现,但不调用超类,即使该类未扩展java.lang.Object

如何强制我的类的任何子类始终调用它们所覆盖的父类的实现方法?

子类java中的“重写”超类成员

如何在python中定义抽象类并强制实现变量

如何在该接口类型的对象上调用实现接口的类中的方法?

Perl与Moo:如何调用方法的超类的实现?

如何在调用自己的植入之前强制继承类的方法实现调用基本方法?

如何从Java的超类内部调用重写方法的超类实现?

如何在Angular接口中实现键,值对对象?

如何在超类的静态函数中获取调用子类的名称?

Dart-如何在子类的构造函数中调用超类的工厂构造函数?

如何在Java中实现许多类通用的定制方法?

如何在Java中实现类级别锁定?

您如何在Java中从超类调用子类方法?

如何在Java的实现类中的抽象类内实现抽象类?

覆盖时如何标记不调用超类的实现?

如何在单独的 Java 类的 OnClick() 方法中实现 startActivity()?

如何从重写的子类方法调用超类的继承方法?

在子类中重写时如何调用私有虚拟基类实现

如何在 Java 类中实现 Kotlin 挂起方法?

在基类重写的 ToString 方法中访问子类对象

如何在 Java 中的 Pojo 类中实现 Hashmap