Статический выброс вложенного класса NoClassDefFoundError

Я пытаюсь использовать класс Utility, состоящий из статических вложенных классов, для общей функциональности. Эти статические вложенные классы реализуют интерфейс командного стиля:

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 принимает 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и т. д. С учетом того, что все они вложены в один класс, я больше не получаю ошибку, и код, вероятно, имеет больше смысла сгруппировать вместе.

Я до сих пор не уверен, откуда возникла ошибка.

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