Также найденный этот разговор с Anders Hejlsberg, который может быть интересным также. Для суммирования точек, которые Anders Hejlsberg сделал с некоторыми дополнительными примечаниями: дженерики Java были сделаны для максимальной совместимости с существующим JVM, который привел к немногим нечетным вещам по сравнению с реализацией, которую Вы видите в C#:
стирание Типа вынуждает реализацию представить каждое универсальное параметрическое значение как Object
. В то время как компилятор обеспечивает автоматические броски между Object
и более определенный тип, он не удаляет негативное воздействие бросков типа и упаковывающий на производительности (например, Object
брошен к определенному типу MyClass
, или int
должен был быть упакован в Integer
, который был бы еще более серьезным для C#/.NET, если бы они следовали за подходом стирания типа из-за пользовательских типов значения). Поскольку Anders сказал: "Вы не получаете ни одной эффективности выполнения" (который овеществленные дженерики включают в C#)
, стирание Типа делает информацию доступной во время компиляции не доступный во время времени выполнения . Что-то, что раньше было List
, становится просто List
без способа восстановить универсальный параметр типа во времени выполнения. Это делает трудным создать отражательные или динамические сценарии генерации кода вокруг дженериков Java. Более свежий ТАК ответ шоу путь вокруг этого через анонимные классы. Но без приемов, что-то как генерация кода во времени выполнения через отражение, которое получает элементы от одного экземпляра набора и помещает его в другой экземпляр набора, может перестать работать во времени выполнения во время выполнения динамично сгенерированного кода: отражение не помогает с ловлей несоответствия в List
по сравнению с List
в этих ситуациях.
, Но +1 для ответа, связывающегося с Jonathan Pryor сообщение в блоге .
Поскольку схемы сами являются XML-документами, вы можете проверить их, как любой другой документ. И XSD, и DTD для XML-схемы можно найти на этом сайте http://www.w3.org/2001/XMLSchema .
Вы можете использовать Nokogiri для этого:
begin
schema = Nokogiri::XML::Schema(File.read('invalid_schema.xsd'))
rescue Nokogiri::XML::SyntaxError => e
puts "Invalid XML Schema!"
end