Статический вложенный доступ к классу, бросающий NoClassDefFoundError
Я пытаюсь использовать служебный класс, состоящий из статических вложенных классов для общей функциональности. Эти статические вложенные классы реализуют интерфейс командного стиля:
public interface BooleanFunction{
public boolean execute();
}
Класс, содержащий эти общие классы, реализующие этот интерфейс:
public class ExBooleans {
public static class isComponentOpen implements BooleanFunction {
private int widgetId;
private int componentId;
public isComponentOpen(int widgetId, int componentId) {
this.widgetId = widgetId;
this.componentId = componentId;
}
@Override
public boolean execute() {
return Widgets.getComponent(this.widgetId, this.componentId) != null;
}
}
Это должно называться так:
ExUtilities.makeCondition(new ExBooleans.isComponentOpen(RANGE_WIDGET_ID, RANGE_COOK_COMPONENT_ID), 1000)
Где makeCondition
принимает a BooleanFunction
:
public static boolean makeCondition (final BooleanFunction booleanFunction, int timeout){
return Utilities.waitFor(new Condition() {
@Override
public boolean validate() {
return booleanFunction.execute();
}
}, timeout);
}
Все это предназначено для обеспечения оболочки вокруг функции Utilities.waitFor(Condition c, int timeout)
для более чистого чтения код.
Однако, когда я вызываю makeCondition
, передавая в ExBooleans.isComponentOpen
, я получаю ошибку времени выполнения:
Unhandled exception in thread ~threadnumber~: java.lang.NoClassDefFoundError: api/ExBooleans$isComponentOpen
На линии, содержащей вызов сверху:
ExUtilities.makeCondition(new ExBooleans.isComponentOpen(RANGE_WIDGET_ID, RANGE_COOK_COMPONENT_ID), 1000)
Любая помощь в решении этой проблемы будет очень признательна!1 ответ:
Я смог решить эту проблему, вытянув методы
Хотя я до сих пор не уверен, откуда взялась эта ошибка.interface
иmakeCondition
в отдельный класс, в котором размещались как эти, так и утилитарные реализацииisComponentOpen
и т. д. Поскольку все они вложены в один класс, я больше не получаю ошибку, и код, вероятно, имеет больше смысла сгруппировать вместе.