Java中的接口数组
我有一个界面。
public interface Module {
void init();
void actions();
}
当我尝试创建这样的数组时会发生什么?
Module[] instances = new Module[20]
我怎样才能实现这个数组?
I have an interface.
public interface Module {
void init();
void actions();
}
What happens when i try to create an array like this?
Module[] instances = new Module[20]
How can i implement this array?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
是的,这是可能的。您需要使用
Module
类型的对象填充数组的字段instances[0] = new MyModule();
并且
MyModule
是一个类实现模块接口。或者,您可以使用匿名内部类:这能回答您的问题吗?
yes, it is possible. You need to fill the fields of the array with objects of Type
Module
instances[0] = new MyModule();
And
MyModule
is a class implementing the Module interface. Alternatively you could use anonymous inner classes:Does this answer your question?
您需要用实现该接口的类的实例来填充该数组。
You would need to fill the array with instances of a class(es) that implement that interface.
您需要创建一个具体的类类型来实现该接口并使用该接口
在你的数组创建中
You need to create a concrete class type that would implement that interface and use that
in your array creation
当然你可以创建一个类型为接口的数组。在使用其中的元素之前,您只需要将对该接口的具体实例的引用放入数组中,可以使用名称创建或匿名创建。下面是一个打印数组对象的哈希码的简单示例。如果您尝试使用任何元素,例如 myArray[0].method1(),您将得到一个 NPE。
Of course you can create an array whose type is an interface. You just have to put references to concrete instances of that interface into the array, either created with a name or anonymously, before using the elements in it. Below is a simple example which prints hash code of the array object. If you try to use any element, say myArray[0].method1(), you get an NPE.
为了澄清@Burna接受的答案,这个数组可以用来安排对象的集合,但它永远不能在集合中安排自己的接口,即将
Module
接口放在instances<中/code> 参考变量。在《JLS》第 10.6 章中
但是您不能在初始化中使用接口
Module
,因为接口无法实例化(根据定义)。因此,您必须首先实现它并将其排列在数组中。To clarify accepted answer from @Burna, this array can be used to arrange collection of object, but it can never arrange its own interface in the collection, that is to put
Module
interface ininstances
reference variable. In JLS Chapter 10.6But you can't use the interface
Module
in the initialization, because interface can't be instantiated (by definition). Thus you have to implement it first and arrange it in the array.