public int compare(MyClass left, MyClass right) {
if (left == null) {
return right == null ? 0 : 1;
}
if (right == null) {
return -1;
}
// do some other comparing
}
Этот код не должен даже компилироваться, потому что в сигнатуре метода вы договорились, что этот метод будет возвращать тип int, но поскольку он имеет значение только в том случае, если утверждение возможно, в некоторых случаях он может даже не возвращать значение.
Теперь перейдем к вашему вопросу «Несовместимые битовые маски», потому что для (right == null) кажется, что метод возвращает два значения, то есть 0 и 1, хотя оба не в одно и то же время. При проверке качества кода сонара вашего инструмента кажется, что метод возвращает два разных значения для одного и того же сравнения, и, следовательно, одно значение может иногда скрывать другое значение.