code: @SuppressWarnings("unchecked")
      synchronized <N extends Number> N parse(final Class<N> type, final String text) {
          
          final Number result;
          if(lenient) {
              try {
                  result = formatter.parse(text);
              } catch(ParseException e) {
                  throw new TextParseException(text, type, e);
              }
          } else {
              ParsePosition position = new ParsePosition(0);
              result = formatter.parse(text, position);
              
              if(position.getIndex() != text.length()) {
                  throw new TextParseException(text, type, String.format("Cannot parse '%s' using fromat %s", text, getPattern()));
              }
          }
          
          try {
              if(result instanceof BigDecimal) {
                  // if set DecimalFormat#setParseBigDecimal(true)
                  return (N) convertWithBigDecimal(type, (BigDecimal) result, text);
                  
              } else {
                  return (N) convertWithNumber(type, result, text);
              }
          } catch(NumberFormatException | ArithmeticException e) {
              throw new TextParseException(text, type, e);
          }
          
      }
docs: 指定した数値のクラスに文字列をパースする。
  <p>Java標準のクラスタイプをサポートします。</p>
  
  @param type 変換する数値のクラス。
  @param text パース対象の文字列。
  @return パースした数値のオブジェクト。
  @throws IllegalArgumentException サポートしていないクラスタイプが指定された場合。
  @throws TextParseException fail convert Number or BigDecimal.