字符串与对象#toString

时间:2019-10-10 14:17:00

标签: java coding-style api-design

在某种情况下,您将为方法使用类型为Object的参数并在内部调用toString()而不是使用String参数并使用方法的用户处理字符串转换?

示例方法为log(Object)log(String) 后者的模棱两可性较小,但更灵活,但可能会重复出现log(object.toString())

是否存在某种形式的javadoc约定,可以用来明确表示该方法的Object变体将使用Object#toString-避免该方法的使用者忘记重写{{ 1}}?

3 个答案:

答案 0 :(得分:1)

在大多数情况下,method(String)method(Object)更好,因为它更加明确,它清楚地传达了您的方法的约定-调用者知道您期望String而不是Object,您将在其上致电toString()

但是,如果您实施例如使用info(String format, Object arg)之类的日志记录库,最好使用Object。日志记录库并不关心参数是否为StringLongInteger等,并且与其定义数百个重载方法,不如定义一个采用Object

答案 1 :(得分:0)

如果方法的代码可能需要调用Object以外的方法,例如String,则有一个明确的情况是定义类型toString()而不是getClass()的参数或hashCode()

另一个考虑因素是:哪个代码可以控制字符串的内容。对于String参数类型,它是调用代码。对于Object参数类型,它可以是调用的代码,也可以是toString()的实现。

答案 2 :(得分:-1)

“您可以在对象上使用toString()来获取该对象的字符串表示形式。

// Java program to illustrate 
// working of toString() method 
class Best_Friend { 
    String name; 
    int age; 
    String college; 
    String course; 
    String address; 
    Best_Friend 
    (String name, int age, String college, String course, String address) 
    { 
        this.name = name; 
        this.age = age; 
        this.college = college; 
        this.course = course; 
        this.address = address; 
    } 
public static void main(String[] args) 
    { 
        Best_Friend b =  
        new Best_Friend("Gulpreet Kaur", 21, "BIT MESRA", "M.TECH", "Kiriburu"); 
        System.out.println(b); 
        System.out.println(b.toString()); 
    } 
} 

结果:

Output: Best_Friend@232204a1