假设我有一个包含抽象类和抽象方法的库:
public abstract class MyAbstractClass{
public void myMethod(){
int a = doSomething("hi");
}
public abstract void doSomething(String param);
}
现在,我决定给这个方法添加一个参数,但是我想保留旧方法的功能以便让旧代码可用:
public void myMethod(){
int a = ?
}
/**
* @deprecated use doSomething(String, String) instead.
*/
@Deprecated
public int doSomething(String param){ return doSomething(param, null); }
public abstract int doSomething(String param, String secondParam);
在这种情况下,我该如何实现myMethod
?
Android支持库中的PagerAdapter
类实际上有一种类似于这样的结构,但是方向相反:
public Object instantiateItem(ViewGroup container, int position) {
return instantiateItem((View) container, position);
}
/**
* @deprecated Use {@link #instantiateItem(ViewGroup, int)}
*/
public Object instantiateItem(View container, int position) {
throw new UnsupportedOperationException(
"Required method instantiateItem was not overridden");
}
这种行为是应该被不鼓励的吗?如果我要使用这种构造,怎样才能知道调用哪个方法呢?
doSomething("hi")
(带有抑制警告)或者仅调用doSomething("hi", null)
? - Jon SkeetmyMethod()
中调用新的doSomething(String, String)
。 - shuangwhywhy