Можно ли принять метод boolean isValueOfType(String value, String className)
?
assertTrue(isValueOfType("123", "java.lang.Integer"))
assertFalse(isValueOfType("ABC", "java.lang.Integer"))
?
Я не вижу никакого способа достижения этой проверки без кода, применяемого к классу, как предложено выше Марко.
Вы можете достичь этого достаточно просто с картой функций, которые пытаются и преобразовывают value
к типу: -
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class Converters {
private final Map<String, Function<String, Boolean>> converters;
Converters() {
converters = new HashMap<>();
converters.put("java.lang.String", (v) -> true);
converters.put("java.lang.Integer", (v) -> {
try {
Integer.valueOf(v);
return true;
}
catch (NumberFormatException e) {
return false;
}
});
}
public boolean isValueOfType(String value, String className) {
Function<String, Boolean> converter = converters.get(className);
return converter.apply(value);
}
}
И блок-тест
import org.junit.Assert;
import org.junit.Test;
public class ConvertersTest {
@Test
public void testInteger() {
Converters converters = new Converters();
Assert.assertTrue(converters.isValueOfType("123", "java.lang.Integer"));
Assert.assertFalse(converters.isValueOfType("ABC", "java.lang.Integer"));
}
@Test
public void testString() {
Converters converters = new Converters();
Assert.assertTrue(converters.isValueOfType("123", "java.lang.String"));
Assert.assertTrue(converters.isValueOfType("ABC", "java.lang.String"));
}
}
выше, может быть избыточна, но в основном таблицу поиска типов и соответствующих методов конвертера.
Если вы не можете использовать Java 8 (lambdas), то с обычными интерфейсами можно добиться чего-то подобного.
Вы можете использовать Список
Что именно вам нужно подтвердить? «Данные имеют тип list.get (i)», неясно. – RealSkeptic
Итак, ваш список - это список строк, которые являются именами классов, таких как 'java.lang.String'? – RealSkeptic