Я использую Truffle & Грааль проекты в моих собственных проектах. Я сталкиваюсь с проблемой, что, когда я использую getDeclaredField()
в Java, он возвращает noSuchFieldException, даже поле существует.getDeclaredField возвращает исключение nosuchfield, даже поле существует
Код производства Исключение составляет
Field field = NodeUtil.class.getDeclaredField("unsafeFieldOffsetProvider");
field.setAccessible(true);
И поле unsafeFieldOffsetProvider
объявлен в NodeUtil.java
private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() {
@Override
public long objectFieldOffset(Field field) {
return unsafe.objectFieldOffset(field);
}
@Override
public int getTypeSize(Class<?> clazz) {
if (!clazz.isPrimitive()) {
return Unsafe.ARRAY_OBJECT_INDEX_SCALE;
} else if (clazz == int.class) {
return Unsafe.ARRAY_INT_INDEX_SCALE;
} else {
throw new UnsupportedOperationException("unsupported field type: " + clazz);
}
}
};
Вот сообщение об ошибке:
Exception in thread "main" java.lang.ExceptionInInitializerError
at edu.uci.python.runtime.object.FixedObjectLayout.<init>(FixedObjectLayout.java:100)
at edu.uci.python.runtime.object.FixedObjectLayout.addAttribute(FixedObjectLayout.java:149)
at edu.uci.python.runtime.object.PythonObject.setAttribute(PythonObject.java:153)
at edu.uci.python.runtime.standardtype.PythonModule.addDefaultConstants(PythonModule.java:45)
at edu.uci.python.runtime.standardtype.PythonModule.<init>(PythonModule.java:41)
at edu.uci.python.builtins.PythonDefaultBuiltinsLookup.createModule(PythonDefaultBuiltinsLookup.java:88)
at edu.uci.python.builtins.PythonDefaultBuiltinsLookup.populateBuiltins(PythonDefaultBuiltinsLookup.java:54)
at edu.uci.python.runtime.PythonContext.<init>(PythonContext.java:79)
at python.truffle.toa.runtime.PythonContextOA.<init>(PythonContextOA.java:13)
at python.truffle.toa.main.PythonMainOA.testFile(PythonMainOA.java:78)
at python.truffle.toa.main.PythonMainOA.main(PythonMainOA.java:39)
Caused by: java.lang.RuntimeException: java.lang.NoSuchFieldException: unsafeFieldOffsetProvider
at edu.uci.python.runtime.object.ObjectLayoutUtil.unsafeFieldOffsetProvider(ObjectLayoutUtil.java:43)
at edu.uci.python.runtime.object.ObjectLayoutUtil.<clinit>(ObjectLayoutUtil.java:47)
... 11 more
Caused by: java.lang.NoSuchFieldException: unsafeFieldOffsetProvider
at java.lang.Class.getDeclaredField(Unknown Source)
at edu.uci.python.runtime.object.ObjectLayoutUtil.unsafeFieldOffsetProvider(ObjectLayoutUtil.java:39)
... 12 more
Если поле действительно объявлено в классе, на который вы ссылаетесь, этого не произойдет. [Пример.] (Http://ideone.com/uOOini). Очевидно, что это не должно быть в этом классе; возможно, источник и файл .class не синхронизированы? Возможно, вы ссылаетесь на * другой класс '' NodeUtil'? –
Да, в этом суть. Я дважды проверю путь сборки и ресурс проекта. – lhan
Я не очень хорошо знаю этот проект Трюфеля и Грааля. Но может ли быть, что он создает объекты прокси для ваших узлов? – bvdb