Я создал простой API для преобразования произвольных объектов в удобочитаемые строки. Подумайте об этом как о обобщенной функциональности String.valueOf()
.интеллектуальное отображение ключей класса
В API это достигается путем выбора
public interface ObjectFormatter {
public String format(Object object);
public Class getObjectClass();
public boolean offer(Object object);
}
в зависимости от способа getClass()
конкретного объекта, а затем передать объект методу format()
. Отображение осуществляется с помощью простого поиска:
Class clazz = object.getClass();
ObjectFormatter formatter = this.formatters.get(clazz);
if(formatter != null)
return formatter;
Однако, это, конечно, работает только в тех случаях, когда класс объектов и ключ класс является точно таким же, но API также должна иметь возможность сопоставить ключевые производные класса (или реализации , если ключ interface
) к тому же форматируемому, в противном случае я бы закончил сопоставление форматера Throwable
с каждым возможным классом исключения в моем приложении.
Поэтому, когда вышеуказанный поиск не удается, мое текущее решение состоит в том, чтобы пройти через всю карту и спросить каждого форматирования, если он способен форматировать мой объект. Но я не слишком доволен этим, и мне интересно, может ли быть лучший способ.
Ну, строгий способ ООП с просто переопределением toString()
и забывание о форматировании будет работать на моих собственных классах, но терпит неудачу в сторонних библиотеках, особенно если конкретная реализация toString()
не включает требуемую информацию об объекте.
Я думаю, «isAssignableFrom» сделает это для меня. Я искал такой метод, но пропустил его несколько раз. –