Не удалось инициализировать класс com.example.testapp.SomeHelper
public class SomeHelper {
...
private int static x;
static {
Map<String, String> aMap = new HashMap<>();
//populate map here
}
public static void setX(int value){
x = value;
}
}
Когда вызывается SomeHelper.setX, я получаю исключение "Не удалось инициализировать класс SomeHelper". Я не уверен, как это исправить. Кто-нибудь сталкивался с этой проблемой? Я попытался перехватить исключение и повторно выдать его как исключение времени выполнения из статического блока, но это не помогает.
2 ответа
Я думаю, что вы имеете в виду, вы получите NoClassDefFoundError
как это:
NoClassDefFoundError: Could not initialize class SomeHelper
Как говорится в JavaSE-7:
NoClassDefFoundError выбрасывается, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), и определение класса не может быть найдено,
Поисковое определение класса существовало, когда выполняемый в данный момент класс был скомпилирован, но определение больше не может быть найдено.
Иногда NoClassDefFoundError
происходит, если статические биты вашего класса, то есть любая инициализация, которая происходит во время определения класса, завершается неудачно.
Итак, первая смена
private int static x;
чтобы,
private static int x;
декларировать setX()
как static
или создать экземпляр SomeHelper
вызывать setX()
,
Чтобы вызвать любой метод с именем класса, метод должен быть static
,
Попробуй это:
public static void setX(int value){
x = value;
}
SomeHelper.setX(someInteger);
Или это:
SomeHelper someHelper = new SomeHelper (); // default constructor
someHelper .setX(someInteger);
Обратите внимание, что вам не нужно предоставлять конструкторы для вашего класса, но вы должны быть осторожны при этом. Компилятор автоматически предоставляет конструктор по умолчанию без аргументов для любого класса без конструкторов.
i) Сделайте метод статическим, чтобы вызывать его с помощью className.
ii) Класс не инициализирован указывает, что инициализация не произошла должным образом, что может быть связано с исключением в статическом блоке.
III) Я вижу, что ваш Map<String, String> aMap
является локальным для статического блока. Вы не используете его где-нибудь еще?