Я ищу исходный код Apache Шторма и я столкнулся то, что я никогда не видел: CLOSE_MESSAGE ((короткий) -100) или CLOSE_MESSAGE ((короткий) -100) , Почему нужно вычесть someNumber из короткого типа? Что это значит? Здесь пока фактический код:Java, Enum: (короткий) - someNumber
enum ControlMessage {
CLOSE_MESSAGE((short)-100),
EOB_MESSAGE((short)-201),
OK_RESPONSE((short)-200),
FAILURE_RESPONSE((short)-400),
SASL_TOKEN_MESSAGE_REQUEST((short)-202),
SASL_COMPLETE_REQUEST((short)-203);
private short code;
//private constructor
private ControlMessage(short code) {
this.code = code;
}
/**
* Return a control message per an encoded status code
* @param encoded
* @return
*/
static ControlMessage mkMessage(short encoded) {
for(ControlMessage cm: ControlMessage.values()) {
if(encoded == cm.code) return cm;
}
return null;
}
int encodeLength() {
return 2; //short
}
/**
* encode the current Control Message into a channel buffer
* @throws Exception
*/
ChannelBuffer buffer() throws IOException {
ChannelBufferOutputStream bout = new ChannelBufferOutputStream(ChannelBuffers.directBuffer(encodeLength()));
write(bout);
bout.close();
return bout.buffer();
}
void write(ChannelBufferOutputStream bout) throws IOException {
bout.writeShort(code);
}
}
после просмотра всех ответов, я думаю, что это кастинг использовался для обозначения FLAGS, как в HTTP-заголовке 200, означает «ОК», но я не понимаю, почему они использовали отрицательные числа? – Humoyun
Честно говоря, я не знаком с Apache, хотя это может быть соглашение для этих конкретных сообщений, чтобы использовать конкретные отрицательные числа, чтобы при появлении в журналах ошибок их можно было легко идентифицировать как ошибка 404 (не найдена)). Очевидно, что из области перечисления нет проблем с использованием отрицательных чисел. Что касается кастинга на короткий, может быть просто для оптимизации использования памяти, так как для краткости требуется меньше битов, чем int, чтобы таким образом уменьшить выделенную память. Я действительно использую short вместо int для этих случаев. Иногда даже байт. – Mechanic