((Object)(this)).toString() 是否总是调用基本实现?
Does ((Object)(this)).toString() always call the base implementation?
我有一个 toString()
的实现,它依赖于一些可能引发异常的代码。
在那种情况下,我想故障转移到默认的 toString()
方法。
为此,使用安全吗
catch (Exception e){
return ((Object)(this)).toString();
}
作为该异常的处理程序?换句话说,将强制使用 Object
toString()
方法。
它似乎适用于我的情况,但我担心它不标准并且可能导致递归。
没有。如果是这样,那将破坏运行时多态性,这是 Java 的基本特征之一(对于方法)。选择的方法取决于您调用它的实际对象,而不是您对该对象的引用类型(这是转换修改的内容)。
您可以使用 super.toString()
,它会使用您超类的版本(可能是也可能不是 Object
的版本,但对于您列出的用例来说似乎足够了)。
I have an implementation of toString()
that relies on some code that could throw an exception.
如果是这种情况,我建议尽可能更改它。如果无法更改它,那么我建议在 toString
中生成对象后,将对象的字符串版本 存储在 上,以便后续调用不昂贵(引发异常很昂贵)。如果对象是可变的并且影响 toString
的内容被修改(以便下次重建),请清除存储的字符串版本。总的来说,toString
应该简单快捷。
调用 super
的版本可能并不理想。相反,也许生成一个包含异常意义的字符串。
完全没有。 JVM 根据对象的确切类型在运行时 确定调用哪个方法。
你漂亮的小演员没有取得任何成就。因为您不能通过强制转换来更改引用的运行时类型!
一个解决方案是:
public String superToString() {
return super.toString();
}
在这样的 类 中,并显式调用该方法。或者,当然可以用 return super.toString()
替换当前执行该转换的行。
但是,尤其是选项 1 只会添加 "worse to bad"。如:toString()
的合同是 return 一个字符串。
只是从不编写toString()
方法
- 需要大量的高强度工作,或者
- 可以抛出异常!
有关进一步的想法,请参阅 How to use toString method in Java。
严肃地说:在任何较大的项目中,您 零 控制 when/how often/in 以何种方式 toString()
在您的对象上调用。你最好确保这些调用 return 快速,return 合理的信息并且永远不会抛出异常。
我有一个 toString()
的实现,它依赖于一些可能引发异常的代码。
在那种情况下,我想故障转移到默认的 toString()
方法。
为此,使用安全吗
catch (Exception e){
return ((Object)(this)).toString();
}
作为该异常的处理程序?换句话说,将强制使用 Object
toString()
方法。
它似乎适用于我的情况,但我担心它不标准并且可能导致递归。
没有。如果是这样,那将破坏运行时多态性,这是 Java 的基本特征之一(对于方法)。选择的方法取决于您调用它的实际对象,而不是您对该对象的引用类型(这是转换修改的内容)。
您可以使用 super.toString()
,它会使用您超类的版本(可能是也可能不是 Object
的版本,但对于您列出的用例来说似乎足够了)。
I have an implementation of
toString()
that relies on some code that could throw an exception.
如果是这种情况,我建议尽可能更改它。如果无法更改它,那么我建议在 toString
中生成对象后,将对象的字符串版本 存储在 上,以便后续调用不昂贵(引发异常很昂贵)。如果对象是可变的并且影响 toString
的内容被修改(以便下次重建),请清除存储的字符串版本。总的来说,toString
应该简单快捷。
调用 super
的版本可能并不理想。相反,也许生成一个包含异常意义的字符串。
完全没有。 JVM 根据对象的确切类型在运行时 确定调用哪个方法。
你漂亮的小演员没有取得任何成就。因为您不能通过强制转换来更改引用的运行时类型!
一个解决方案是:
public String superToString() {
return super.toString();
}
在这样的 类 中,并显式调用该方法。或者,当然可以用 return super.toString()
替换当前执行该转换的行。
但是,尤其是选项 1 只会添加 "worse to bad"。如:toString()
的合同是 return 一个字符串。
只是从不编写toString()
方法
- 需要大量的高强度工作,或者
- 可以抛出异常!
有关进一步的想法,请参阅 How to use toString method in Java。
严肃地说:在任何较大的项目中,您 零 控制 when/how often/in 以何种方式 toString()
在您的对象上调用。你最好确保这些调用 return 快速,return 合理的信息并且永远不会抛出异常。