docs: @SuppressWarnings("unchecked")
      public static <T> T asType(Number self, Class<T> c) {
          if (c == BigDecimal.class) {
              return (T) toBigDecimal(self);
          } else if (c == BigInteger.class) {
              return (T) toBigInteger(self);
          } else if (c == Double.class) {
              return (T) toDouble(self);
          } else if (c == Float.class) {
              return (T) toFloat(self);
          }
          return asType((Object) self, c);
      }