code: @Override
      @SuppressWarnings("unchecked")
      public <V> VertexProperty<V> property(String key) {
          Objects.requireNonNull(key, "key cannot be null");
          // check we have a property with the given key
          Collection<?> collection = properties.get(key);
          if (collection != null) {
              // check size
              if (collection.size() == 1) {
                  // iterator
                  Iterator<?> iterator = collection.iterator();
                  // advance iterator to first element
                  if (iterator.hasNext()) {
                      // first element
                      return (VertexProperty<V>)iterator.next();
                  }
                  return VertexProperty.empty();
              }
              // exception
              throw Vertex.Exceptions.multiplePropertiesExistForProvidedKey(key);
          }
          return VertexProperty.empty();
      }
docs: {@inheritDoc}