静态方法不能重写,可是写程序时又碰到这种需求,有什么变通的法子没?
我想写这样一个父类S,让他的子类A,B等都有一个名为getFieldNames()的静态方法,不同的子类调用这个方法时返回值是不同的.
然后我写一个泛型类G,类中要用到getFieldNames()这个方法.如下:
class S {
//这里面怎么写getFieldNames()
}
class A extends S {
//这里要重写getFieldNames(),怎么实现
}
class G<T extends S> {
void fun(){
//调用getFieldNames()做一些事件.
T.getFieldNames();
}
}
求一个变通的法子,或者别的思路什么的都行?
------解决方案--------------------
明显这是要做一个策略模式
先做个接口规范操作。
A 和 B都实现了这个接口,
这样你要用时再决定传入A还是B.
静态方法无解。
------解决方案--------------------
使用反射可以实现你的要求
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
class S {
public static String[] getFieldNames(){
return new String[]{"a","b"};
}
}
class A extends S {
public static String[] getFieldNames(){
return new String[]{"c","d"};
}
}
class G<T extends S> {
void fun(Class<T> t){
//调用getFieldNames()做一些事件.
try {
System.out.println(Arrays.toString((Object[]) t.getDeclaredMethod("getFieldNames").invoke(null)));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public class TestStatic {
/**
* @param args
*/
public static void main(String[] args) {
G<S> g=new G<S>();
g.fun(S.class);
G<A> g2=new G<A>();
g2.fun(A.class);
}
}