Java:在示例commons-lang3`StringUtils`上继承静态方法

时间:2019-06-09 15:46:39

标签: java inheritance apache-commons-lang3

我想基于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。我记得from this threadStringCharSequence。因此,我写

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中?

来自here的信息是“所有可访问的方法都由子类继承”。其中也有说明

  

与继承的静态(类)方法和继承的非静态(实例)方法的唯一区别是,当您编写具有相同签名的新静态方法时,旧的静态方法只是隐藏的,不会被覆盖。

但是我没有擦除相同的方法isEmpty


编辑

因此,感谢@luksch,我添加了一个方法

public static boolean isEmpty(final String cs) {
    return isEmpty((CharSequence)cs);
}
在我的StringUtils类中

可以正常工作。但是,为了进行测试,我想从commons库中调用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

为什么?

0 个答案:

没有答案