Мне показали способ проанализировать некоторые данные из базы данных для объекта. Мне дали этот хороший класс обертки
public class ObjectWrapper implements Wrapper{
private Object wrappedObject;
//...
public static Wrapper wrap(ResultSet rs, int column, int columnType) throws SQLException {
if (columnType == 0) {
return new EmptyListExceptionWrapper();
} else {
return new ObjectWrapper(rs.getObject(column));
}
}
}
Когда я пытаюсь использовать его для анализа этих объектов, я получаю имена вроде databaseConnection.ObjectWrapper@5010be6
а не так, как они есть на самом деле. Другой хороший парень сказал мне, что я должен переопределить метод toString()
внутри класса ObjectWrapper
, чтобы получить реальные результаты.
Как я должен это сделать? Я знаю, что эти примитивные типы не могут быть добавлены или изменены. Например, я должен сделать что-то подобное ниже?
public static String toString(){
String str = new String();
return str += wrappedObject;
}
Во-первых, методы, применяемые к определенному экземпляру вашего класса, не должны быть static
, и вам следует избегать объединения строк в пользу StringBuilder
.
Во-вторых, ряд инструментов создадут для вас полезные методы toString
: ваша среда IDE может генерировать одну, а Apache Commons Lang имеет ToStringBuilder
.
Если у вас нет информации об завернутом типе (и его собственной реализации toString
), вы можете просто использовать что-то вроде этого:
@Override
public String toString() {
// uses a StringBuilder implicitly
return "ObjectWrapper[" + wrappedObject.toString() + "]";
}
wrappedObject
вместо wrappedObject.toString()
.
Object.toString(), который вы вызываете в
str += wrappedObject;
по умолчанию вернет хэш-код объекта. Вам нужно бросить wrappedObject в то, что вы можете затем распечатать свойства
class objectDef{
private int x;
public int y;
public int getX() { return x; }
}
//ToString method
public String toString()
{
return "ObjectWrapper has Y: " + ((objectDef)wrappedObject).y) + " x: " + ((objectDef)wrappedObject).getX() ".";
}
toString
не использует адрес памяти объекта (который, кстати, является подвижным и, следовательно, недоступным для кода Java); он использует хеш-код объекта.
databaseConnection.ObjectWrapper@5010be6
,ΔΕ01.1