我正在重构代码...考虑到这种继承链...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
}
}
关于java - 通用方法输入类型的通用对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49943819/