Строка против объекта # toString - PullRequest
0 голосов
/ 10 октября 2019

Есть ли случай, когда у вас будет параметр типа Object для метода и внутренний вызов toString(), а не параметр String и пользователь метода будет обрабатывать преобразование строк?

Примером метода является log(Object) против log(String) Последний является менее двусмысленным и более гибким, но может вводить повторяющиеся вхождения log(object.toString()).

Существует ли какая-то форма соглашения Javadoc, чтоможет использоваться для явного обозначения того, что вариант метода Object будет использовать Object#toString - чтобы избежать того, что потребитель метода забывает переопределить toString?

Ответы [ 3 ]

1 голос
/ 10 октября 2019

В большинстве случаев method(String) лучше, чем method(Object), так как он более явный, он четко сообщает контракт вашего метода - вызывающий абонент знает, что вы ожидаете String, а не Object, для котороговы будете вызывать toString().

Однако, если вы реализуете, например, библиотеку журналирования с такими методами, как info(String format, Object arg), может быть лучше использовать Object. Библиотека журналов не заботится, является ли аргумент String, Long, Integer и т. Д., И вместо сотен перегруженных методов лучше определить только один метод, который принимает Object.

0 голосов
/ 10 октября 2019

Существует явный случай для определения параметра типа Object вместо String, если коду метода может потребоваться вызов методов, отличных от toString(), например getClass() или hashCode().

Другое соображение: какой код контролирует содержимое строки. В случае типа параметра String это код вызова. В случае типа параметра Object это либо вызываемый код, либо реализация (и) toString().

0 голосов
/ 10 октября 2019

"Вы можете использовать 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

"

...