我需要编写一个接受一个对象的函数,但是我希望在函数调用中强制执行(不是在函数调用之后)该对象是一个接口.
意思是,我想确保在编译时这是一个接口,而不是在运行时.
我的意思是什么?
interface ISomething {...}
class A implements ISomething { ... }
ISomething something = new A();
MyClass.register(something);
Run Code Online (Sandbox Code Playgroud)
在这个例子中,传递的对象是一个接口,我希望MyClass.register函数在它的声明中强制执行这个要求.
我不知道我将获得哪个接口,并且没有定义另一个接口由所有其他实现实现,因为我需要真正的接口.
rsp*_*rsp 10
要仅接受实现接口作为参数的对象,请将接口用作类型,即:
void acceptMaps(Map argument) {
}
Run Code Online (Sandbox Code Playgroud)
可以使用实现Map接口的对象来调用,例如,HashMap但不能使用Strings,因为它们没有实现Map.
这是你对你的问题的意思吗?
在此示例中编辑,实现SortedMap扩展的对象也Map被接受,因此在您的情况下,您可以创建BaseInterface并扩展AcceptedInterface extends BaseInterface您希望被.register(BaseInterface arg)方法接受的接口(如).
您无法实例化接口,因此您永远无法创建一个接口.您可以在函数的参数中指定接口,并且只能传入实现该接口的对象.但是无法要求接口是传入的内容,因为您无法创建它们.
我想你需要重新思考你想要完成的事情.