使用toString()方法接受任何对象作为参数

时间:2014-02-18 17:32:10

标签: java generics duck-typing

我正在尝试创建一个方法,它可以接受各种类型的对象,对传入的任何对象执行toString,然后打印它。有时它会是一个int,有时是一个long,有时是一个字符串,有时候是一个自定义对象,等等。唯一的断言应该是它有一个toString()方法。基本上,我想模拟python的duck-typing,而不是每次使用该方法时都必须在此API之外调用toString()。

这是现有功能:

/**
 * Log a message at TEST level
 * @param message: The message to log
 */
public void test(String message) {
    log(Level.TEST, message);
}

以下是我到目前为止试图加强它的内容:

/**
 * Log a message at TEST level
 * @param message: An object of any class that implements toString.
 */
public void test(Class<?> message) {
    String messageString = message.toString();
    log(Level.TEST, messageString);
}

这似乎在语法上是正确的,但它没有给出我想要的东西:

Cannot resolve method 'test(int)'

是否有一种在Java中实现此功能的合理方法?

2 个答案:

答案 0 :(得分:5)

public void test(Object message) {
    log(Level.TEST, message.toString());
}

Autoboxing将处理原语。但是公平警告:许多(大多数?)toString()方法的默认输出不是很易读,因为它们遵循Object.toString()方法。

答案 1 :(得分:2)

任何课程都有toString()方法,因为java.lang.Object拥有它。因此,你的断言有点......毫无意义。

正如@Kevin所提到的,使用Object message代替Class clazz,这样就可以了。 :)