【发布时间】:2014-05-17 00:15:25
【问题描述】:
我收到一个对象并需要记录它。其中一些有 cusom toString(),然后我想使用它,但有些没有,我得到类似 mightypork.rogue.bus.events.MouseMotionEvent@2d19587d 的东西。
我正在寻找一种方法来动态(可能使用反射?)检查传入对象是否已覆盖 toString()。
String objToString(Object o)
{
if(???) {
return o.toString();
} else {
// fallback method
return o.getClass().getSimpleName();
}
}
旁注:
它是一个事件总线系统,一些类可以根据实现的接口订阅然后接收事件。我不可能要求所有客户端都拥有 toString(),而且我想将此方法用于不止一个目的。
【问题讨论】:
-
如果他们没有自定义实现,你会怎么做?你真的不应该做这样的事情,它围绕多态的目的工作。
-
我不关心多态性原理,我想要好的日志输出。
-
然后自己覆盖
toString,这就是它的用途!你不控制你的对象吗? -
我不想将 toString 添加到所有内容中;我没有时间做那个。它们并不都是数据类。
-
@MightyPork 好吧,这就是我问“你不控制你的对象吗?”的原因。所以,既然答案是否定的,那么我不明白为什么你需要的不仅仅是你得到的对象的类名(如果它们确实有
toString),因为你不知道@987654327 是什么@ 无论如何都会代表。
标签: java reflection overriding