Scala защитное кодирование вокруг asInstanceOf принуждения

Показательный пример:

java.lang.ExceptionInInitializerError
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
    at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
    at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
    at java.lang.reflect.Field.get(Field.java:393)
    at utest.runner.BaseRunner.runUTestTask(BaseRunner.scala:30)
    at utest.runner.BaseRunner$$anonfun$utest$runner$BaseRunner$$makeTask$1.apply(BaseRunner.scala:95)
    at utest.runner.BaseRunner$$anonfun$utest$runner$BaseRunner$$makeTask$1.apply(BaseRunner.scala:95)
    at utest.runner.Task.executeInternal(Task.scala:48)
    at utest.runner.Task.execute(Task.scala:19)
    at sbt.TestRunner.runTest$1(TestFramework.scala:76)
    at sbt.TestRunner.run(TestFramework.scala:85)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFunction.apply(TestFramework.scala:207)

Вот исходное местоположение, которое наталкивается на это исключение, а вот копия строки:

val suite = TestUtils.loadModule(name, testClassLoader).asInstanceOf[TestSuite]

Завтра я буду отлаживать Utest, чтобы отследить этот конкретный случай, который должен быть крайним случаем, поскольку это происходит только в одном из моих проектов с включенным тестированием (вероятно, связанных с путями каталогов и выравниванием пакетов там).

Но можете ли вы предложить хорошую форму защитного программирования, избегая такого рода ошибок отражения, чтобы код мог перехватить условие ошибки перед вызовом asInstanceOfили, альтернативно, идиоматический код для блока перехвата - передающий причины сбоя приведения более действенным образом?

0 ответов

Другие вопросы по тегам