Java: наследование статических методов на примере commons-lang3 `StringUtils` - PullRequest
0 голосов
/ 09 июня 2019

Я хочу опираться на org.apache.commons.lang3.StringUtils и добавить определенный метод, специфичный для моей проблемы.Поэтому я пытаюсь наследовать от класса commons и писать

package org.test.project;

public class StringUtils extends org.apache.commons.lang3.StringUtils {

    public static boolean myMethod(final String cs) {
        // My method body
    }

}

Теперь я хочу использовать метод public static boolean isEmpty(final CharSequence cs) из org.apache.commons.lang3.StringUtils в другой части моего кода.Насколько я помню и из этой темы a String является CharSequence.Таким образом, я пишу

package org.test.project.package;

import org.test.project.StringUtils;

public class TestClass{

    public void someMethod(String s){

        if (StringUtils.isEmpty(s)){
            // do stuff
        }
    }
}

Почему я получаю ошибку:

cannot find symbol
symbol: method isEmpty(String)
location: class StringUtils

в моей IDE?

С здесь У меня естьИнформация о том, что «Все доступные методы наследуются подклассами».В нем также указывается

Единственное различие с унаследованными статическими (классовыми) методами и унаследованными нестатическими (экземплярами) методами заключается в том, что при написании нового статического метода с той же сигнатурой старыйСтатический метод просто скрыт, не переопределяется.

Но у меня нет метода isEmpty с тем же стиранием.


Редактировать

ИтакСпасибо @luksch, я добавил метод

public static boolean isEmpty(final String cs) {
    return isEmpty((CharSequence)cs);
}

в мой класс StringUtils, и это работает.Однако для тестирования я хочу вызвать public static String center(final String str, final int size) из библиотеки.Поэтому я пишу

package org.test.project.package;

import org.test.project.StringUtils;

public class TestClass{

    public void someMethod(String s){

        if (StringUtils.isEmpty(s)){
            // do stuff
        }

        String test = StringUtils.center("test",10);

    }
}

У меня нет какого-либо метода center моего StringUtils подкласса.Поэтому я подумал, что он просто автоматически вызовет метод из org.apache.commons.lang3.StringUtils.Однако я получаю сообщение об ошибке, аналогичное приведенному выше:

cannot find symbol
symbol: method center(String,int)
location: class StringUtils

Почему?

...