Использование фразы «небезопасное отражение», в общем, немного похоже на использование фразы «опасный взрыв» - прилагательное почти избыточно, но мы все еще иногда используем его.
Отражение обходит проверку типов, которую выполняет компилятор. Например, вы можете создать новый экземпляр Class<String>
, выполнив что-то вроде (я не проверял это)
Class<String> theStringClass = (Class<String>) Class.forName("java.lang.String")`
, но это несколько небезопасно, потому что, если вы допустили ошибку и получили
Class<String> myStringClass = (Class<String>) Class.forName("java.lang.Sting")`
или
Class<String> myStringClass = (Class<String>) Class.forName("java.lang.Integer")`
вы не получите сообщение об ошибке, пока строка кода не будет запущена. Напротив, если вы сделаете что-то вроде
Class<String> myStringClass = Sting.class
, компилятор сразу выдаст вам ошибку. Таким образом, в качестве общего правила рефлексия небезопасна.
В посте блога "небезопасность" может быть вызвана тем, что GSON делает что-то вроде Article.class.newInstance ()прямого вызова конструктора (и установки значений по умолчанию), но мне это не сразу понятно.