@Override
 public String toString() {
   StringBuilder b = new StringBuilder();
   for (byte[] bs : this.commandElems) {
     b.append(Coder.bytesToString(bs));
     b.append(' ');
   }
   return b.toString();
 }
  /**
   * Constructor for {@link Command}. Must initialize Command with a {@link SocketChannel} and a
   * {@link List} of command elements
   *
   * @param commandElems List of elements in command
   */
  public Command(List<byte[]> commandElems) {
    if (commandElems == null || commandElems.isEmpty())
      throw new IllegalArgumentException(
          "List of command elements cannot be empty -> List:" + commandElems);
    this.commandElems = commandElems;
    this.response = null;

    RedisCommandType type;

    try {
      byte[] charCommand = commandElems.get(0);
      String commandName = Coder.bytesToString(charCommand).toUpperCase();
      type = RedisCommandType.valueOf(commandName);
    } catch (Exception e) {
      type = RedisCommandType.UNKNOWN;
    }
    this.commandType = type;
  }