Вы должны действительно использовать скобки в своих конструкциях if-else, в противном случае в качестве предложения «then» используется только следующий оператор, что может привести к путанице.
Вот так выглядит ваш код в скобках:
BasicMessage inputMessage;
if (SNIP1) {
inputMessage = new AddressMessage(caption,in.readUTF(),in.readInt());
}
if (SNIP2) {
inputMessage = new FileMessage(caption,in.readUTF());
} else {
inputMessage = new BasicMessage(caption);
}
in.readUTF();
return inputMessage;
вы получите либо FileMessage (SNIP2 = TRUE), либо BasicMessage (SNIP2 = FALSE), ничего больше.
Редактировать: «else if (SNIP2)» вместо «if (SNIP2)» решит вашу проблему, но вы должны действительно использовать скобки