Предположим, у нас есть такой интерфейс:
- Code: Select all
public interface MyInterface {
int VAL1 = 1;
int VAL2 = 2;
String [] STRINGS = {
"String-1",
"String-2",
"String-3"
};
}
Используем интерфейс:
- Code: Select all
public class MyClass implements MyInterface {
public void test() {
int v1 = VAL1;
int l = STRINGS.length;
// или
// String s = STRINGS[1];
}
}
Под J2SE идет нормально, под J2ME вылетает на int l = STRINGS.length с ошибкой:
java/lang/NoSuchFieldError: No such field STRINGS.[Ljava/lang/String;.
Проверка показала, что почему-то выходит так, что STRINGS всегда равно null, несмотря на то, что другие переменные из интерфейса, вроде int VAL1 = 1; всегда отрабатываются нормально.
В итоге при работе возникала конструкция null.length или null[index] и на этом месте происходил неотлавливаемый вылет с системным эксепшеном. Пришлось повозиться пару часов, чтобы разобраться в чем дело.
Что это? Глюк реализации JVM от Nokia (проверял на нескольких эмуляторах) или фича Java 2ME?
Проверялось также на эмуляторе от Sun WTK, но результат уже не помню. По-моему была такая же ошибка.