我需要编写一个接受对象的函数,但我希望在函数调用中(而不是在函数被调用之后)强制该对象是一个接口。
这意味着,我希望确保这是编译时的接口,而不是运行时的接口。
我是什么意思?
interface ISomething {...}
class A implements ISomething { ... }
ISomething something = new A();
MyClass.register(something);在本例中,传递的对象是一个接口,我希望MyClass.register函数在其声明中强制执行this请求。
我不知道我将获得哪个接口,并且定义另一个接口由所有其他实现实现是没有用的,因为我需要真正的接口。
发布于 2009-11-19 21:28:38
您可以询问您在运行时实现的对象的接口的类。如果您不能为编译器提供您期望的接口类型,它就无法预测将传递到您的方法中的内容,因此您必须使用运行时反射。
发布于 2009-11-19 21:19:38
要仅接受实现接口的对象作为参数,请使用接口作为类型,即:
void acceptMaps(Map argument) {
}可以使用实现Map接口的对象(如HashMap )调用,但不能使用String调用,因为它们不实现Map。
这就是你提问的意思吗?
编辑在此示例中,实现扩展Map的SortedMap的对象也被接受,因此在您的示例中,您可以创建一个BaseInterface,并在您希望被.register(BaseInterface arg)方法接受的接口(如AcceptedInterface extends BaseInterface)中扩展它。
发布于 2009-11-19 21:15:48
你不能实例化一个接口,所以你永远不能创建一个来发送的接口。您可以在函数的参数中指定一个接口,并且只能传递实现该接口的对象。但是没有办法要求接口是传入的,因为您不能创建它们。
我认为你需要重新考虑你想要实现的目标。
https://stackoverflow.com/questions/1763212
复制相似问题