我需要编写一个接受对象的函数,但我想在函数调用中(而不是在调用函数之后)强制该对象是一个接口(interface)。
意思是,我想确保这是编译时的接口(interface),而不是运行时的接口(interface)。
我的意思是什么?
interface ISomething {...}
class A implements ISomething { ... }
ISomething something = new A();
MyClass.register(something);
在此示例中,传递的对象是一个接口(interface),我希望 MyClass.register 函数在其声明中强制执行此要求。
我不知道我将获得哪个接口(interface),并且定义另一个由所有其他实现来实现的接口(interface)是没有用的,因为我需要真正的接口(interface)。
最佳答案
要仅接受实现接口(interface)的对象作为参数,请使用接口(interface)作为类型,即:
void acceptMaps(Map argument) {
}
可以使用实现Map
接口(interface)的对象来调用,例如HashMap
,但不能使用String
来调用,因为它们没有实现 > map
。
这就是你的问题的意思吗?
Edit 在此示例中,实现扩展 Map
的 SortedMap
的对象也被接受,因此在您的情况下,您可以创建一个 BaseInterface
并在您希望被 .register(BaseInterface arg)
方法接受的接口(interface)(例如 AcceptedInterface extends BaseInterface
)中扩展它。
关于Java : How to create a function that can only accept object which is an Interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763212/