我有一段时间在java工作。我知道他们有一些东西在java中被称为接口。在阅读它们的同时,我开始了解它们是标记界面。最近,当我开始阅读有关java 8的内容时,我开始了解其他接口的功能接口。
我只是想知道java中可用的不同类型的接口是什么?
答案 0 :(得分:1)
Java语言规范本身并不定义术语标记接口,该术语由作者,开发人员和设计人员创造。一个常见问题是我们是否可以创建一个标记界面,答案是肯定的,原因如下:
我们无法创建类似于Serializable或Cloneable的标记界面,但我们可以通过在自定义标记界面周围编写额外代码来模拟功能。
空接口称为标记或标记接口。例如,Serializable,EventListener,Remote(java.rmi.Remote)是标记接口。这些接口中没有任何字段和方法。 在此处阅读更多内容:http://beginnersbook.com/2016/03/tag-or-marker-interfaces-in-java/
Functional Interface是Java 8中的新增功能,只有一个抽象方法的接口称为功能接口。阅读更多here。
Java中没有其他类型的接口。
答案 1 :(得分:0)
每个人都没有特别的意义。
Marker interface
有点“design pattern”,你将标签/标签附加到一组对象上,以表明它们有一些共同点,它们可以用于某种过程或操作。 Serializable
是一个典型示例,标记对象可以序列化/反序列化。
另一方面,对于FunctionalInterface
,它只是一个有限制的interface
,只能有一个抽象方法,因此代表一个单一的函数契约。 Java 8为lambda expression
添加functional programming
,对于FP
,我们需要经常来回传递function
。假设我们有一个界面:
public interface StringTrasformer {
String transform(Object obj);
}
传统上我们只能创建异步类的实例,如:
someObj.doTransform(new StringTransformer() {
@Override
public String transform(Object object) {
return "result";
}
});
但是只有一种方法可以实现,因此不需要使代码如此冗长,lambda expression
它可以简短:
abc.doTransform(object -> "result");
注释FunctionalInterface
用于编译器检查您注释的接口是否是有效接口。甚至功能界面适用于lambda expressions
,method references
和constructor references
,但没有什么能阻止您以传统方式使用它。因为它本质上只是一个普通的界面。