返回 Java 中的实例
我们无法创建接口的实例。
但是为什么 Java API 中的 Arrays.asList(Object[] a) 会返回一个 List(List 是一个接口)?
谢谢你!
We cannot create an instance of an interface.
But why does Arrays.asList(Object[] a)
in the Java API, return a List
(List
being an interface)?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它创建一个实现接口的类实例。
你不知道那个类是什么;它甚至可以每隔星期二使用不同的类(事实并非如此)。
您只需通过接口使用该类即可。
It creates an instance of a class which implements the interface.
You don't know what that class is; it could even use a different class every other Tuesday (it doesn't).
You just use the class through the interface.
Java 和 OOO 编程通常允许您定义如何使用对象(即对象的接口),因此只有库实现者需要担心事物实际工作方式的具体细节。这就是为什么最好不要返回类本身而只返回一个接口,除了更好的可维护性之外,它还允许您在为应用程序编写测试代码时使用模拟或存根对象。
Java 特别允许您动态创建接口实现。即你可以做类似的事情
,这对于像 List 这样的复杂接口来说当然是一种矫枉过正,但实际上对于较小的接口来说非常方便。
Java and OOO programming in general lets you define how an object should be used (that´s the interface of the object) so only the library implementor needs to worry about the gory details of how things actually work. That´s why it is good practice to never return a class itself but just an interface, in addition to better maintanibility it will also let you use mocks or stubs objects when coding tests for your applications.
Java in particular let´s you create an interface implementation on fly. i.e you can do something like
This is of course an overkill for complex interfaces like List but actually very handy for smaller interfaces.