我想基于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 thread和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中?
来自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
为什么?