Весной 4 очень легко вам не нужно вносить какие-либо изменения в фасоль. Отметьте свой тип возврата только @ResponseBody.
Пример: -
@RequestMapping(value = "/image/{id}")
public @ResponseBody
byte[] showImage(@PathVariable Integer id) {
byte[] b;
/* Do your logic and return
*/
return b;
}
Каковы различия между кодом выше и простой инициализацией
blockquote>C
в конструкторе дляA
?Это полностью эквивалентно
A() : c(b.GetC()) {}
. Разницы нет.Единственное отличие, которое вы заметите, это использование нескольких конструкторов. Он будет использовать инициализатор конструктора вместо стандартного, если он указан.
уровень "объявления", которого еще не должно быть. Но C ++ никогда не перестает удивлять, и приведенный выше код, похоже, работает.
То есть это может существовать на уровне классов в C ++?
blockquote>Нет. Инициализатор запускается при вызове конструктора. Элемент для инициализации существует только при создании экземпляра.
Однако, для меня также имеет смысл, что на уровне класса мы объявляем шаблон, для которого должен копироваться каждый экземпляр класса, и на уровне «объявления»
blockquote>this
не должно существовать еще. Но C ++ никогда не перестает удивлять, и приведенный выше код, похоже, работает.Вы вроде как правы. Если бы у вас было
struct foo { int bar; decltype(this->bar) baz; };
, вы бы получили ошибку компилятора для использования
this
на верхнем уровне класса.В вашем случае, хотя использование
this
какC c = this->b.GetC(); //or C c{this->b.GetC()};
на самом деле не использует
this
на верхнем уровне. Инициализатор члена класса in является просто синтаксическим сахаром для сообщения классу, что, если вы не инициализируете член вручную, вы должны использовать предоставленный инициализатор. Таким образом, вы на самом деле не используетеthis
в теле класса, вы просто используете ярлык.Каковы различия между приведенным выше кодом и простой инициализацией
blockquote>C
в конструкторе дляA
?Преимущество в том, что если у вас есть какое-то значение по умолчанию, чтобы иметь этот член, вам не нужно указывать его во всех созданных вами конструкторах. Вы делаете это один раз, и вы покрыты. Если вам когда-либо понадобится изменить это значение, вы не можете испортить его, потому что есть только одно место, чтобы изменить его. Вы не можете забыть сделать это в определенном конструкторе, который действительно хорош.
Обратите внимание, что есть случай, когда вам нужно использовать
this
в инициализаторе члена класса. Если элемент, который вы хотите использовать, происходит от зависимого имени, такого как базовый класс шаблона, то вам нужно использоватьthis
, чтобы компилятор разрешил имя.