Есть метод:
private Executable numValidate(int num, By by, Comparator<Integer> comp) {
return () -> {
WebElement elem = chrome.findElement(by);
if (isNull(elem)) {
return false;
}
Integer value = Ints.tryParse(elem.getText());
return !isNull(value) && comp.compare(num, value) > 0;
};
}
Нужно сделать более универсальным для любых числовых типов:
private <N extends Number> Executable numValidate(N num, By by, Comparator<N> comp) {
return () -> {
WebElement elem = chrome.findElement(by);
if (isNull(elem)) {
return false;
}
????Integer value = Ints.tryParse(elem.getText());????
return !isNull(value) && comp.compare(num, value) > 0;
};
}
Но как мне распарсить неизестный тип без instanceof
?
Здесь вам поможет класс NumberFormat
:
Number number = NumberFormat.getInstance().parse("123.45");
Также можно указать локаль для форматов чисел:
Number number1 = NumberFormat.getInstance(Locale.ENGLISH).parse("123.45");
Number number2 = NumberFormat.getInstance(Locale.forLanguageTag("ru")).parse("123,45");
Как вариант, можно просто перебрать все возможные типы:
....
Number value;
try {
value = Integer.parseInt(string);
} catch (NumberFormatException e) {
try {
value = Double.parseDouble(string);
} catch (NumberFormatException e) {
try {
value = Long.parseLong(string);
} catch (NumberFormatException e) {
try {
...
} catch (NumberFormatException e) {
throw new IllegalArgumentException("....");
}
}
}
}
....
Либо регуляркой узнать тип и парсить:
....
if (string.matches("-?\\d+")) {//тут при необходимости стоит предусмотреть количество знаков, чтобы распарсить Char/Integer/Long
value = Integer.parseInt(string);
} else if (string.matches("-?\\d+\\.\\d+")) {
value = Double.parseDouble(string);
} else......
Либо, если надо только сравнить строки, можно привести их к строкам и сравнить строковым компаратором.
P.S. Также в вашем примере дженерики не нужны.
private Executable numValidate(Number num, By by, Comparator<Number> comp) {
return () -> {
WebElement elem = chrome.findElement(by);
if (isNull(elem)) {
return false;
}
.....
return !isNull(value) && comp.compare(num, value) > 0;
};
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Цель: скачать файл и сохранить в папке Downloads При попытке открыть файл для записи таким способом