Аргумент общего типа, проверяемый параметром класса, может быть взломан, лучше?
Рассмотрим класс:
class OnlyIntegerTypeAllowed {
OnlyIntegerTypeAllowed(Class clazz) {
System.out.println(clazz);
if (clazz != Integer.class)
throw new RuntimeException();
}
}
Он предназначен для принятия только аргументов типаInteger
, Мы добавилиif-throw
проверьте в своем конструкторе. Это очень распространенный способ проверки аргументов типа.
Однако эту проверку можно обойти (взломать, обмануть):
OnlyIntegerTypeAllowed normalWay =
new OnlyIntegerTypeAllowed(Integer.class);
OnlyIntegerTypeAllowed hacking =
new OnlyIntegerTypeAllowed((Class) Class.forName(Integer.class.getName()));
И то и другое вышеуказанные две строки имеютнет ошибки компиляции инет исключения брошены!
О, МОЙ БОГ. - есть ли лучший способ обеспечить соблюдение аргумента типа?