Динамическая проверка типов - это нечто отличное от того, что вы просите.С помощью динамической проверки вы проверяете, является ли obect экземпляром определенного типа (в основном разрешен тот же тип или более узкий тип), и вы можете сделать это с помощью оператора instanceof
.Но это касается иерархии объектов, а не концепции «может быть преобразован в», которую вы хотели бы иметь.Вы можете попробовать с string instanceof Integer
, но это ВСЕГДА будет ложным.
В вашей ситуации вы хотите проверить, представляет ли строка целое число, и вам следует сделать это по-другому:
try {
int number = Integer.parseInt(string);
}
catch (NumberFormatException e) {
System.out.println("String is not an integer string!");
}
В противном случае вы можете определить регулярное выражение для каждого типа и проверить, что строка содержит через него:
if (string.matches("[1-9][0-9]*"))
...
В любом случае, поскольку String
- это просто строковый тип и ничего больше, RTTI выигралтебе здесь не поможет.Сама строка является ортогональной каждому другому типу (int, float и т. Д.), Даже если она представляет текстовую версию другого типа.
Решение можно найти, если вы можете изменить типы исходных строк, в этом случаевы можете определить, например,
class IntString extends String {
IntString(int i) {
super(Integer.toString(i));
}
}
, тогда вы можете проверить, если string instanceof IntString
, но это будет работать, только если строки построены с их конкретным типом, например, String s = new IntString(20)
.