首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java :如何创建一个只能接受作为接口的对象的函数?

Java :如何创建一个只能接受作为接口的对象的函数?
EN

Stack Overflow用户
提问于 2009-11-19 21:13:36
回答 6查看 707关注 0票数 0

我需要编写一个接受对象的函数,但我希望在函数调用中(而不是在函数被调用之后)强制该对象是一个接口。

这意味着,我希望确保这是编译时的接口,而不是运行时的接口。

我是什么意思?

代码语言:javascript
运行
复制
interface ISomething {...} 
class A implements ISomething { ... }
ISomething something = new A(); 
MyClass.register(something);

在本例中,传递的对象是一个接口,我希望MyClass.register函数在其声明中强制执行this请求。

我不知道我将获得哪个接口,并且定义另一个接口由所有其他实现实现是没有用的,因为我需要真正的接口。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-11-19 21:28:38

您可以询问您在运行时实现的对象的接口的类。如果您不能为编译器提供您期望的接口类型,它就无法预测将传递到您的方法中的内容,因此您必须使用运行时反射。

票数 0
EN

Stack Overflow用户

发布于 2009-11-19 21:19:38

要仅接受实现接口的对象作为参数,请使用接口作为类型,即:

代码语言:javascript
运行
复制
void acceptMaps(Map argument) {
}

可以使用实现Map接口的对象(如HashMap )调用,但不能使用String调用,因为它们不实现Map

这就是你提问的意思吗?

编辑在此示例中,实现扩展MapSortedMap的对象也被接受,因此在您的示例中,您可以创建一个BaseInterface,并在您希望被.register(BaseInterface arg)方法接受的接口(如AcceptedInterface extends BaseInterface)中扩展它。

票数 10
EN

Stack Overflow用户

发布于 2009-11-19 21:15:48

你不能实例化一个接口,所以你永远不能创建一个来发送的接口。您可以在函数的参数中指定一个接口,并且只能传递实现该接口的对象。但是没有办法要求接口是传入的,因为您不能创建它们。

我认为你需要重新考虑你想要实现的目标。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1763212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档