# V6088. Result of this expression will be implicitly cast to 'Type'. Check if program logic handles it correctly.

Данное правило находит тернарные операторы, в которых происходит неявное приведение численных типов. Это может нарушить логику работы программы из-за неожиданной смены типа объекта.

Рассмотрим пример подобной ошибки:

    public void writeObject(Serializer serializer, Object o)
    {
      ....
      else if (o instanceof Integer)
      {
        serializer.writeInt((Integer) o);
      }
      else if (o instanceof Double)
      {
        serializer.writeDouble((Double) o);
      }
      ....
    }

    public void serialize(Serializer serializer)
    {
      Object data = condition ? 5 : 0.5;           // <=
      writeObject(serializer, data);
    }

В данном случае фактическим аргументом метода 'writeObject' всегда будет являться число типа 'double': 5.0 или 0.5. Из-за этого внутри 'writeObject' будет выполнена не та ветка конструкции if-else-if, которая подразумевалась программистом. Исправление этой ошибки заключается в замене тернарного оператора на блок if-else:

    public void serialize(Serializer serializer)
    {
      if (condition)
      {
        writeObject(serializer, 5);
      }
      else
      {
        writeObject(serializer, 0.5);
      }

      // or

      Object data;
      if (condition)
      {
        data = 5;
      }
      else
      {
        data = 0.5;
      }
      writeObject(serializer, data);
    }

Особенность этой ошибки состоит в том, что взаимозаменяемые условный и тернарный операторы в реальности могут иметь различное поведение.