我有一个类上下文。它需要传递给另一个类的构造函数并在其中使用 - 比如说,Manager。但是上下文变量也必须是 MyInterface 的实现,它有义务实现 requiredMethod()。所以我想成为这样的人:
class Manager {
Manager(Context context) {
context.doSomeStandardContextStuff();
if (context instanceof MyInterface) {
context.requiredMethod()
}
}
}
但是,编译器和IDE告诉我requiredMethod()无法解决。
那么,为了解决这个问题,我是否有义务创建一个“人造的”另一个类,它从 Context 类扩展并实现 MyInterface - 只是为了在上面的构造函数中将它用作单个对象?或者有更好的解决方案吗?
最佳答案
您可以使构造函数成为通用的,并绑定(bind)一个 double 类型:
<T extends Context & MyInterface> Manager(T context) {
context.doSomeStandardContextStuff();
context.requiredMethod();
}
这完全避免了强制转换。
但是,您也可以指定实现类型。即:
class Implementation extends Context implements MyInterace {...}
Manager(Implementation i) {...}
或者,如果您有多个实现,请创建一个公共(public)父类(super class)型:
abstract class Union extends Context implements MyInterface {}
class Implementation extends Union {...}
Manager(Union u) {...}
Union
将是一个虚拟类,但仍然比通用版本更有效。
由于通用版本被删除以将 Context
作为参数,并且每次您想调用方法时都必须(在幕后)转换为 MyInterface
来自 MyInterface
。
关于java - 方法的参数 - 同时需要类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923675/