private static Rule<View> getNumberRule(Field field, View view, NumberRule numberRule) { if (!TextView.class.isAssignableFrom(view.getClass())) { Log.w(TAG, String.format(WARN_TEXT, field.getName(), NumberRule.class.getSimpleName())); return null; } else if (numberRule.type() == null) { throw new IllegalArgumentException( String.format("@%s.type() cannot be null.", NumberRule.class.getSimpleName())); } List<Rule<?>> rules = new ArrayList<Rule<?>>(); int messageResId = numberRule.messageResId(); String message = messageResId != 0 ? view.getContext().getString(messageResId) : numberRule.message(); switch (numberRule.type()) { case INTEGER: case LONG: Rules.regex(null, Rules.REGEX_INTEGER, true); break; case FLOAT: case DOUBLE: Rules.regex(null, Rules.REGEX_DECIMAL, true); break; } if (numberRule.lt() != Double.MIN_VALUE) { String ltNumber = String.valueOf(numberRule.lt()); double number = Double.parseDouble(ltNumber); switch (numberRule.type()) { case INTEGER: rules.add(Rules.lt(null, ((int) number))); break; case LONG: rules.add(Rules.lt(null, ((long) number))); break; case FLOAT: rules.add(Rules.lt(null, Float.parseFloat(ltNumber))); break; case DOUBLE: rules.add(Rules.lt(null, Double.parseDouble(ltNumber))); break; } } if (numberRule.gt() != Double.MAX_VALUE) { String gtNumber = String.valueOf(numberRule.gt()); double number = Double.parseDouble(gtNumber); switch (numberRule.type()) { case INTEGER: rules.add(Rules.gt(null, ((int) number))); break; case LONG: rules.add(Rules.gt(null, ((long) number))); break; case FLOAT: rules.add(Rules.gt(null, Float.parseFloat(gtNumber))); break; case DOUBLE: rules.add(Rules.gt(null, Double.parseDouble(gtNumber))); break; } } if (numberRule.eq() != Double.MAX_VALUE) { String eqNumber = String.valueOf(numberRule.eq()); double number = Double.parseDouble(eqNumber); switch (numberRule.type()) { case INTEGER: rules.add(Rules.eq(null, ((int) number))); break; case LONG: rules.add(Rules.eq(null, ((long) number))); break; case FLOAT: rules.add(Rules.eq(null, Float.parseFloat(eqNumber))); break; case DOUBLE: rules.add(Rules.eq(null, Double.parseDouble(eqNumber))); break; } } Rule<?>[] ruleArray = new Rule<?>[rules.size()]; rules.toArray(ruleArray); return Rules.and(message, ruleArray); }