我正在重构代码......考虑到这个继承链......
public class Base
public class Simple extends Base
public class Secure extends Simple
public class Framework extends Secure
public class Application extends Framework
和班级
public class ApplicationCallback
目前,ApplicationCallback
有这种方法public abstract ApplicationCallback#doSomething(Application app)
,但我希望它可以被Base
访问....没有改变从ApplicationCallback#doSomething(Application app)
到ApplicationCallback#doSomething(Base base)
的代码。
有没有办法我可以定义一个方法,我可以定义,以防止代码到处变化?
有点像ApplicationCallback#doSomething(T<? extends Base> app)
,所以当覆盖时,我可以把ApplicationCallback#doSomething(Base base)
和ApplicationCallback#doSomething(Simple simple)
等等。
问题是关于@Override ApplicationCallback#doSomething()
您应该在ApplicationCallback
类上引入一个通用参数。这允许您定义仅采用某些子类型的回调:
class Callback<T extends Base> { abstract void doSomething(T t); }
这将允许您使用您定义的子类型中的方法,例如,如果Secure
类添加了getSecureThing()
功能,您可以:
Callback<Base> base = new Callback<Base>() {
void doSomething(Base base) {
// getSecureThing not available
}
}
Callback<Application> app = new Callback<Application>() {
void doSomething(Application app) {
// app.getSecureThing is available
}
}